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+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
vue使用element-ui按需引入
May 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php定时执行任务设置详解
2015/02/06 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
异步加载script的代码
2011/01/12 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
python字典改变value值方法总结
2019/06/21 Python
Python二元赋值实用技巧解析
2019/10/25 Python
介绍一下内联、左联、右联
2013/12/31 面试题
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
技校教师求职简历的自我评价
2013/10/20 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
高中生评语大全
2014/04/25 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
学校安全责任书范本
2014/07/23 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
通知的格式范文
2015/04/27 职场文书
小学教研工作总结2015
2015/05/13 职场文书
高三英语教学反思
2016/03/03 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android