我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3实现移动端滑动模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3实现移动端滑动模块

本文实例为大家分享了vue3实现移动端滑动模块的具体代码,供大家参考,具体内容如下

需要实现的需求如下

直接上代码

HTML:

<div class="container" id="container">
  <div class="controlDiv" id="controlDiv">
    <div 
      class="centerCircle" 
      id="centerCircle" 
      @touchstart="start" 
      @touchmove="move" 
      @touchend="end">
    </div>
  </div>
</div>

javascript:

import {defineComponent, onMounted} from "vue";
export default defineComponent({
  setup(prop,content) {
    let controlDiv ='' //控制器容器元素
    let circleDiv = '' //中心圆元素
    //最大宽高
    let maxW = 0
    let maxH = 0
    //初始触摸点
    let oL = 0
    let oT = 0
    //相对屏幕的初始触摸点
    let touchClientX = 0 
    let touchClientY = 0

    onMounted(() => {
      controlDiv = document.querySelector('#controlDiv') //控制器容器元素
      circleDiv = document.querySelector('#centerCircle') //中心圆元素
      console.log(circleDiv.offsetWidth, circleDiv.offsetHeight)

      //限制最大宽高,不让滑块出去
      maxW = controlDiv.offsetWidth
      maxH = controlDiv.offsetHeight
    })

    //手指触摸开始,记录div的初始位置
    const start = (e) => {
      var ev = e || window.event;
      var touch = ev.targetTouches[0];
      //初始位置
      oL = touch.clientX - circleDiv.offsetLeft
      oT = touch.clientY - circleDiv.offsetTop

      touchClientX = touch.clientX
      touchClientY = touch.clientY

      console.log(oL, oT)
      //阻止浏览器滑动默认行为
      document.addEventListener('touchmove', defaultEvent, { passive: false })
    }

    //手指滑动并改变滑块位置
    const move = (e) => {
      var ev = e || window.event
      var touch = ev.targetTouches[0]
      var oLeft = touch.clientX - oL
      var oTop = touch.clientY - oT

      //判断是否超出边界
      if(oLeft - 30 < 0) {
          oLeft = 30
      } else if(oLeft + 30 >= maxW) {
          oLeft = maxW-30
      }
      if(oTop - 30 < 0) {
          oTop = 30
      } else if(oTop + 30 >= maxH) {
          oTop = maxH-30
      }

      //通过正切函数
      let tan = (150 - oTop)/(oLeft - 150)
      // console.log(tan)

      // circleDiv.style.transition = '.1s all' //动画效果(体验不佳,不建议使用)

      //判断中心位置上下左右20px范围可随意滑动
      if(Math.abs(oLeft - 150) >= 20 || Math.abs(150 - oTop)>= 20){
        // 通过正切函数判断滑块该在X轴上移动或是y轴上移动
        if((tan <= -1) || (tan >= 1)){ //y轴
          circleDiv.style.top =  oTop + 'px'
          circleDiv.style.left =  150 + 'px'
        }else if((tan > -1) || (tan < 1)){ //x轴
          circleDiv.style.top = 150 + 'px'
          circleDiv.style.left = oLeft + 'px'
        }
      }else{
        circleDiv.style.top =  oTop + 'px'
        circleDiv.style.left = oLeft + 'px'
      }
    }

    //手指抬起
    const end = (e) => {
      //回弹初始点
      circleDiv.style.left = (touchClientX -  oL) + 'px'
      circleDiv.style.top = (touchClientY - oT) + 'px'

      //恢复浏览器滑动默认行为
      document.removeEventListener("touchmove", defaultEvent, { passive: true })
    }

    //阻止默认事件
    function defaultEvent(e) {
      e.preventDefault();
    }

    return { start, move, end }
  }
});

CSS:

.controlDiv{
  position: relative;
  width: 300px;
  height: 300px;
  background: #ebebeb;
  margin: 200px auto;
  border-radius: 50%;
 }
.centerCircle{
  width: 65px;
  height: 65px;
  background: #fff;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  box-shadow:0px 0px 30px #a7a7a7;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue3实现移动端滑动模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue3怎么优雅的实现移动端登录注册模块

这篇文章主要介绍vue3怎么优雅的实现移动端登录注册模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言近期开发的移动端项目直接上了 vue3 ,新特性 composition api 确实带来了全新的开发体验.开
2023-06-14

js如何实现移动端简易滑动表格

这篇文章主要介绍“js如何实现移动端简易滑动表格”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“js如何实现移动端简易滑动表格”文章能帮助大家解决问题。上js文件代码