• JS移动端事件


    触屏事件

    这类事件专属于移动端 在PC端并不响应 

    touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。

    常见的触屏事件如下:

    触屏touch事件

    说明

    touchstart手指触摸到一个DOM元素时触发
    touchmove手指在一个DOM元素上滑动触发
    touchend手指从一个DOM元素上移开时触发

    触摸事件对象 TouchEvent

    是一类描述手指在触摸平面的状态变化事件,这类事件用于描述一个或多个触点,使开发者可以监视触点的 移动 增加 和减少

    touchstart touchmove touchend 三个事件都会有各自的事件对象

    触摸列表说明
    touches正在触摸屏幕的所有手指的一个列表
    targetTouches正在触摸当前DOM元素上的手指的一个列表
    changedTouches手指状态发生的改变的列表,从无到有,从有到无的变化

    小示例代码

    1. let box1 = document.querySelector('#box')
    2. box1.addEventListener('touchstart',function (e) {
    3. console.log('类似点击')// 手指按下
    4. console.log(e);
    5. console.log(e.touches[0])// 整个页面的触点列表
    6. console.log(e.targetTouches)// 点击目前事件元素的触点列表
    7. })
    8. box1.addEventListener('touchmove',function () {
    9. console.log('试图拖动')
    10. })
    11. box1.addEventListener('touchend',function (e) {
    12. console.log('离开了')// 手指离开(上升)
    13. console.log(e.changedTouches) // 记录离开时的信息数据
    14. // 当手指离开元素触点时 就没有了touches targetTouches 但是会有changedTouches 它们都是列表 浏览器模拟时只有一个[0]
    15. })

    移动端手指拖动元素的案例:

    核心原理就是计算触点移动的位置 再把移动的位置 更新给 被拖动元素的样式

    touchstart 触碰元素时:获取触点初始坐标,同时获得元素的初始位置

    touchmove 移动手指时:计算手指的滑动距离,并且移动盒子

    touchend 最后离开手指

    手指拖动到屏幕边界会触发屏幕滚动 这里可以 阻止默认事件 e.preventDefault()

    上代码:

    1. let box1 = document.querySelector('#box'),
    2. touchX = null,
    3. touchY = null,
    4. boxX = null,
    5. boxY = null;
    6. box1.addEventListener('touchstart',function (e) {
    7. touchX = e.targetTouches[0].pageX,
    8. touchY = e.targetTouches[0].pageY,
    9. boxX = box1.offsetLeft,
    10. boxY = box1.offsetTop;
    11. //console.log(touchX,touchY,boxX,boxY)
    12. })
    13. box1.addEventListener('touchmove',function (e) {
    14. let moveX = e.targetTouches[0].pageX - touchX,
    15. moveY = e.targetTouches[0].pageY - touchY,
    16. boxMx = moveX + boxX,
    17. boxMy = moveY + boxY;
    18. box1.style.left = boxMx + 'px'
    19. box1.style.top = boxMy + 'px'
    20. e.preventDefault()
    21. })
    22. box1.addEventListener('touchend',function (e) {
    23. })

    元素.classList方法

    ele.classList 返回元素的类名

    ele.classList[0] 返回元素第一个类名

    ele.classList.add('three') 添加一个类名 不会覆盖之前的 类名字符串前不用加 点

    ele.classListremove('one') 删除类名

    切换类:

    btn.onclick = function () {    document.body.classList.toggle('bg')    }

    移动端返回顶部和PC端一致 

    封装一个动画函数

    调用 window.scroll(0,目标Y)

    在滚顶到一定程度 出现返回顶部的按钮 点击触发 返回顶部的函数

    1. let div1 = document.querySelector('div'),
    2. span = document.querySelector('span'),
    3. divT = div1.offsetTop;
    4. window.addEventListener('scroll',function () {
    5. if (window.pageYOffset > divT){
    6. span.style.display = 'block'
    7. }else {
    8. span.style.display = 'none'
    9. }
    10. })
    11. span.addEventListener('click',function () {
    12. goTop(window,0)
    13. })
    14. function goTop(obj,num,callback) {
    15. clearInterval(obj.timeOut) // 清除以前的定时器 只保留一个定时器执行
    16. obj.timeOut = setInterval(function () {
    17. let step = (num - window.pageYOffset) / 10
    18. // 取整 三元表达式 步长取为整数 正数就往大了取 负数就往小了取
    19. step = step > 0 ? Math.ceil(step) : Math.floor(step)
    20. if (window.pageYOffset == num){
    21. clearInterval(obj.timeOut)
    22. // if (callback){
    23. // callback()
    24. // }
    25. callback && callback()
    26. }
    27. window.scroll(0,window.pageYOffset + step)
    28. },15)
    29. }

    fastclick 解决移动端click延时问题

    移动端click事件会有300ms的延时,原因是移动端端屏幕双击会缩放页面

    解决方案:禁用缩放

     引入 fastclick.js  

     使用:

    if ('addEventListener' in document){
        document.addEventListener('DOMContentLoad',function () {
              FastClick.attach(document.body)
        },false)
      }

  • 相关阅读:
    开发一个微信小程序,对酒店经营管理有哪些好处?
    Go语言的100个错误使用场景(11-20)|项目组织和数据类型
    因为Google Chrome中Software Reporter Tool占CPU用过高,我选择转战Microsoft Edge浏览器,电脑至于不卡了
    LeetCode--155. 最小栈(C++描述)
    Java安全之SnakeYaml反序列化分析
    P1151 子数整数
    【Linux】从零开始学习Linux基本指令(一)
    云音箱服务器对接
    数位dp算法leetcode.788
    【C++11算法】minmax和minmax_element
  • 原文地址:https://blog.csdn.net/benlalagang/article/details/126121905