vue实现移动端div拖动效果


Posted in Vue.js onMarch 03, 2022

本文实例为大家分享了vue实现移动端div拖动的具体代码,供大家参考,具体内容如下

手机上会偶尔用到拖动div的效果,虽然我自己还没遇到,先写一个以防万一,需要注明的是,具体实现代码是我在网上找的,但是那个代码存在一些问题,我又搜集了其他资料对其修改,达到了现在的样子,所以还是要感谢写这段代码的大神与万能的搜索引擎

1、分享代码

html代码

<template>
  <div class="main">
    <div ref="move_div" @touchstart="down" @touchmove="move" @touchend="end" :style="{top: top  + 'px', left: left  + 'px'}" class="drag_area"></div>
  </div>
</template>

极其简单的结构,毕竟只是个DEMO

SCSS代码

.main{
    background-color: brown;
    height: -webkit-fill-available;
    .drag_area{
      width: 10vw;
      height: 10vw;
      background-color: dodgerblue;
      position: absolute;
      top: 0;
      left: 0;
    }
  }

为了截图显眼,特地给main加了个背景颜色

效果图

vue实现移动端div拖动效果

效果呢,就是你可以在屏幕范围内自由拖动蓝色色块,不过超出屏幕区域我特意做了限制,不需要限制的可以自己改

JS代码

export default {
  name: 'drag',
  data () {
    return {
      flags: false,
      position: {x: 0, y: 0, left: 0, top: 0},
      top: 0,
      left: 0,
      width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
      height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
    }
  },
  methods: {
    down () { // 拖动开始的操作
      this.flags = true
      const refs = this.$refs.move_div.getBoundingClientRect()
      let touch = event
      if (event.touches) {
        touch = event.touches[0]
      }
      this.position.x = touch.clientX
      this.position.y = touch.clientY
      this.position.left = refs.left
      this.position.top = refs.top
    },
    move () { // 拖动中的操作
      if (this.flags) {
        let touch = event
        if (event.touches) {
          touch = event.touches[0]
        }
        const xPum = this.position.left + touch.clientX - this.position.x
        const yPum = this.position.top + touch.clientY - this.position.y
        this.left = xPum
        this.top = yPum
        this.banOut()
        // 阻止页面的滑动默认事件
        document.addEventListener('touchmove', function () {
          event.preventDefault()
        }, {passive: false})
      }
    },
    end () { // 拖动结束的操作
      this.flags = false
      this.banOut()
    },
    banOut () { // 避免拖动出界的限制
      const refs = this.$refs.move_div.getBoundingClientRect()
      if (this.left < 0) {
        this.left = 0
      } else if (this.left > this.width - refs.width) {
        this.left = this.width - refs.width
      }
      if (this.top < 0) {
        this.top = 0
      } else if (this.top > this.height - refs.height) {
        this.top = this.height - refs.height
      }
    }
  }
}

代码呢,简洁明了,你要是对touch事件有学习需求呢可以自己琢磨,要是只是要用呢,复制粘贴改一改就行了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
在Vue中使用mockjs代码实例
Nov 25 Vue.js
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
vue实现滑动解锁功能
Vue全局事件总线你了解吗
Feb 24 #Vue.js
Vue的生命周期一起来看看
Vue的过滤器你真了解吗
Feb 24 #Vue.js
Vue监视数据的原理详解
Feb 24 #Vue.js
Vue的列表之渲染,排序,过滤详解
Vue3如何理解ref toRef和toRefs的区别
Feb 18 #Vue.js
You might like
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
Orlebar Brown官网:设计师泳裤和泳装
2020/12/08 全球购物
车间主管岗位职责
2013/11/14 职场文书
优秀求职自荐信怎样写
2013/12/18 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
PHP基本语法
2021/03/31 PHP
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
sql server 累计求和实现代码
2022/02/28 SQL Server
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
实现GO语言对数组切片去重
2022/04/20 Golang
python画条形图的具体代码
2022/04/20 Python