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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
Vue实现图书管理案例
Jan 20 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
vue特效之翻牌动画
Apr 20 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
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
一张图带我们入门Python基础教程
2017/02/05 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
在Python中COM口的调用方法
2019/07/03 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python数据预处理方式 :数据降维
2020/02/24 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
详解Python模块化编程与装饰器
2021/01/16 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
贝佳斯官方网站:Borghese
2020/05/08 全球购物
车辆安全检查制度
2014/01/12 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
公共场所禁烟标语
2014/06/25 职场文书
代领毕业证委托书
2014/08/02 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
社区好人好事材料
2014/12/26 职场文书
售票员岗位职责
2015/02/15 职场文书
初婚未育证明样本
2015/06/18 职场文书
房屋产权证明书
2015/06/19 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python