Vue实现拖拽拼图验证

  • 前言
  • 一、放置拼图
    • 1. HTML结构以及CSS
    • 2. 初始化相关数据
  • 二、拖拽逻辑
  • 总结

前言

本案例需要基于后端给出的接口:
首先是获取拼图的接口,会提供前端一块大的拼图,也就是挖空拼图了的背景图;会提供前端一块小拼图,也就是拼图本体;然后是小拼图相对大图的y轴偏移值;

第二个是验证接口,将x轴的偏移值传给后端来做验证;


提示:以下是本篇文章正文内容,下面案例可供参考

一、放置拼图

1. HTML结构以及CSS

因为后端给的拼图大小为55 × 45,大图大小为240 × 160,所以我就这么设置了。
结构是这样考虑的,上方是大图,然后在一个bounder里放置小拼图以及拖拽栏。
使用到了draggable-vue-directive插件指令,详细看官方文档,此处不赘述:draggable-vue-directive

<div class="img-wrapper"><img :src="imaObj.bigImage" class="big-img" ref="bigImg" /><div class="bounder" ref="bounder"><divref="draggableWrapper"v-draggable="draggableValue"style="top: 409.5px !important"><img:src="imaObj.smallImage"ref="smallImg"class="small-img":style="{ top: imaObj.yHeight - 184 + 'px' }"/><div class="handler" ref="handler"><imgclass="right-drag"src="@/assets/images/index/right-drag-rect.jpg"alt="move"/></div></div></div>
</div>
.img-wrapper {position: relative;width: 240px;height: 220px;margin: 0 auto;.bounder {box-sizing: content-box;border: 1px solid #666;background: rgb(238, 238, 238);position: relative;height: 45px;width: 100%;margin: 0 auto;bottom: -20px !important;}.big-img {width: 240px;height: 160px;}.small-img {// &:hover {//   cursor: pointer;// }position: absolute;top: 0;left: 0;box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.13);}.handler {height: 45px;&:hover {cursor: pointer;}}.right-drag {height: 45px;width: 55px;}
}

2. 初始化相关数据

我是用element-ui的dialog组件的,在打开dialog的时候进行相关初始化,getCode就是获取大图、拼图、以及y轴坐标的;

handleOpenDialog() {this.getCode();if (!this.smallDom || !this.bigDom) {this.smallDom = this.$refs.smallImg;this.bigDom = this.$refs.bigImg;this.draggableValue.boundingElement = this.$refs.bounder;this.draggableValue.handle = this.$refs.handler;this.handlerDom = this.$refs.handler;this.draggableWrapperDom = this.$refs.draggableWrapper;}
},
//多的1px是因为bounder
getCode() {jyajax.get("/xxx/code/slide").then(res => {this.imaObj.bigImage = "data:image/png;base64," + res.data.bigImage;this.imaObj.smallImage = "data:image/png;base64," + res.data.smallImage;this.imaObj.yHeight = res.data.yHeight;// this.imaObj.xWidth = res.data.xWidth;this.verifyImg.length = 0;this.verifyImg.push(this.imaObj.bigImage);const draggableState = JSON.parse(this.handlerDom.getAttribute("draggable-state"));const boundingClientRect = this.bigDom.getBoundingClientRect();draggableState.currentDragPosition.left = boundingClientRect.left + 1;draggableState.startDragPosition = draggableState.currentDragPosition;this.handlerDom.setAttribute("draggable-state",JSON.stringify(draggableState));this.handlerDom.style.left =draggableState.currentDragPosition.left + "px";this.draggableWrapperDom.style.left = this.handlerDom.style.left;});
},

二、拖拽逻辑

onDragEnd: function(positionDiff, absolutePosition, event) {const draggableState = JSON.parse(this.handlerDom.getAttribute("draggable-state"));const boundingClientRect = this.bigDom.getBoundingClientRect();const currentDragPosition = draggableState.currentDragPosition;this.$http.get("/xxx/code/sms", {moveLength: currentDragPosition.left - boundingClientRect.x,phone: this.ruleForm.phone,yHeight: this.imaObj.yHeight}).then(res => {if (res.code === 1) {this.$message.success("验证成功!");} else {if (res.code === -1) {this.dialogVisible = false;}if (res.code === -2) {this.getCode();}this.$message({showClose: true,message: res.msg,type: "error"});}}).catch(err => {this.$message.error(err);});
},

总结

实习期间做的一个小小挑战,完成效果挺差的,用了近乎原生的手段完成,仅作一年前的个人记录和一些参考。
内容不完整,考虑到代码保密问题。

Vue实现拖拽拼图滑块验证相关推荐

  1. 解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突

    功能描述: 如图,右侧悬浮菜单按钮,只支持上下方向拖动,点击时展开或关闭菜单. BUG说明: 鼠标上下方向拖拽,如果松开时鼠标位于悬浮按钮上会默认执行click事件,经验证,click事件与mouse ...

  2. 基于Vue实现拖拽效果以及解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突

    本人在开发中遇到实现一个基于vue的悬浮框拖动效果,经过努力研究最终实现了功能,一下是我的方法和部分代码,希望对您有所帮助,如有不对的地方还请指出.谢谢!下面步入正题: 首先展示一下功能的效果图: 要 ...

  3. java和vue实现拖拽可视化_Vue拖拽组件开发实例详解

    摘要:这篇Vue栏目下的"Vue拖拽组件开发实例详解",介绍的技术点是"Vue拖拽组件开发实例.vue拖拽组件.拖拽组件.组件开发.开发实例.实例详解",希望对 ...

  4. 拖拽功能 php,基于Vue实现拖拽功能

    这篇文章主要为大家详细介绍了Vue实现拖拽功能,拖动方块进行移动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: ...

  5. vue 实现文本的拖拽_基于Vue实现拖拽功能

    本文实例为大家分享了Vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: HTML代码: 位置 x:{{val.x}} y:{{val.y}} //注意这里要通过指令绑定函数将当前元素的位 ...

  6. vue.js 拖拽排序_快速轻巧的Vue.js拖放可排序库

    vue.js 拖拽排序 vue-smooth-dnd (vue-smooth-dnd) A fast and lightweight drag&drop, sortable library f ...

  7. Vue 实现拖拽模块(二)自定义拖拽组件位置

    上文介绍了 拖拽添加组件 的简单实现,本文将继续给大家分享如何自定义拖拽组件位置的简单实现,文中通过示例代码介绍,感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue自定义拖拽组件位置的简单实现,具体 ...

  8. Vue 实现拖拽模块(三)自定义拖拽组件的样式

    上文介绍了 自定义拖拽组件位置 的简单实现,本文将继续给大家分享如何自定义拖拽组件位置的简单实现,文中通过示例代码介绍,感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue 自定义拖拽组件的样式,具体 ...

  9. vue.draggable 拖拽 ant 组件布局

    vue.draggable 拖拽 项目需求中,需要支持拖拽,即找到了vue.draggable,下面来说一下基本使用方法 1.首先需要安装它,官网地址 https://www.itxst.com/vu ...

  10. vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)

    最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...

最新文章

  1. CFileDialog的使用方法简单介绍
  2. python爬虫正则表达式实例-python爬虫学习三:python正则表达式
  3. elasticsearch6 学习之安装
  4. Tomcat部署Maven的JavaWeb项目——这样我们写完程序把程序打包为war包,拿到用户那边启动服务器就可以运行了,简单轻松
  5. ap java内容_AP 计算机知识点总结
  6. 无招胜有招之Java进阶JVM(八)类加载机制
  7. 前华远房地产任大炮任志强:我一定不要清华的毕业生
  8. Linux系统启动全过程
  9. (41)css 三大隐藏属性
  10. sftp api java_SFTP例子2----使用JSch实现SFTP文件传输
  11. 风控模型中的五大类聚类算法介绍
  12. 机器学习之旅:支持向量机通俗导论(理解SVM的三层境界)
  13. Abaqus DOC 搜索功能 在 IE浏览器 显示“应用程序已被JAVA安全阻止”解决办法
  14. 简单控制台项目:电影购票系统
  15. 回车符,换行符与'\0'
  16. i++和++i的区别
  17. 计算机基础知识试题及答案
  18. 动态规划 || 威威猫系列故事——篮球梦 (类似背包)
  19. 【转】欧姆龙OMRON PLC之 CP1H 以太网FINS/TCP通讯实例
  20. 快看,教你怎么上班摸鱼!

热门文章

  1. MongoDB(shel)-表增删改
  2. python方波绘制_怎么用python 画出任意占空比的一串矩形方波呢?
  3. 纯前端 HTML+JS版, Vue.js版 二维码:生成、扫描、识别、解析、扫一扫
  4. 【微信小程序更改appid失败】微信小程序修改appid一直失败报错tourist appid解决办法
  5. Java 解析epub格式电子书,helloWorld程序,附带源程序和相关jar包
  6. Linux#Shell#if [ $# -ne 1 ];then 是什么意思?
  7. 面试官:为什么 MySQL 的索引要使用 B+ 树,而不是其它树?比如 B 树?
  8. 网络传输中的那些编码之-chr和hex(base16)
  9. NSCalendar 日历类
  10. Pyecharts库及其与Django的结合使用