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中动态修改css其中一个属性值操作
Dec 07 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vuex的使用步骤
Jan 06 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
Vue h函数的使用详解
Feb 18 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
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
var与Javascript变量隐式声明
2009/09/17 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
搭建vue开发环境
2018/07/19 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
Linux下编译安装MySQL-Python教程
2015/02/02 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
2014年创先争优活动总结
2014/05/04 职场文书
推广普通话标语
2014/06/27 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
食品安全主题班会
2015/08/13 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
用Python实现屏幕截图详解
2022/01/22 Python