# 触屏事件

# 触屏事件概述

  • 移动端浏览器兼容性较好,我们不需考虑以前 JS 的兼容性问题,可以放心使用,我们放心得使用原生 JS 书写移动端自己得独特的地方,比如触屏事件 touch,Android 和 IOS 都有
  • touch 对象代表了一个触摸点,触屏事件可响应应用对屏幕或者触屏版得操作
  • 常见触屏事件
触屏 touch 事件 说明
touchstart 手指触摸到一个 DOM 元素触发
touchmove 手指触摸一个 DOM 元素移动时触发
touchend 手指从一个 DOM 元素上移动开时触发

# 触摸事件对象(TouchEvent)

  • TouchEvent 是一类描述手指再触摸平面(触摸屏,触摸板)的状态变化的事件,这类事件用于描述一个或者多个触点,使开发者可以检测点的移动,触点的增加和减少,等
  • touchstart,touchmove,touchend 三个事件都会各自有事件对象
  • 触摸事件对象重点我们看三个常见对象列表
触摸列表 说明
touches 正在触摸屏幕的所有手指的一个列表
targetTouches 正在触摸当前 DOM 元素上的一个列表
changeTouches 手指状态发生了改变的列表,从无到有,从有到无变化

# 移动端拖动元素

  • touchstart,touchmove,touchend 可以拖动元素
  • 但是拖动元素需要当前手指的坐标值,我们可以使用 targetTouches [0] 里面的 pageX 和 pageY
  • 移动端移动原理:手指移动中,计算出手指移动的距离,然后用盒子原来的位置 + 手指移动的距离
  • 手指移动的距离:手指滑动中的位置 - 手指刚开始触摸位置

拖动元素三部曲

  • 触摸元素 touchstart:获取手指初始坐标,同时获取盒子原来位置
  • 移动手指 touchmove:计算手指滑动距离,并且移动盒子
  • 离开手指 touchend

** 注意:** 手指移动会触发屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault();

<script>
    var div = document.querySelector('div');
    var startX = 0;
    var startY = 0;
    var x = 0;
    var y = 0;
    div.addEventListener('touchstart',function(e){
        startX = e.targetTouches[0].pageX;
        startY = e.targetTouches[0].pageY;
        x = this.offsetLeft;
        y = this.offsetTop;
    })
    div.addEventListener('touchmove',function(e){
        var moveX = e.targetTouches[0].pageX - startX;
        var moveY = e.targetTouches[0].pageY - startY;
        this.style.left = x + moveX + 'px';
        this.style.top = y + moveY + 'px';
        e.preventDefault();     // 阻止屏幕移动的默认行为
    })
</script>

# 移动端常见特效

# classList 属性

classList 属性是 HTML5 所新增的一个属性,返回元素类名,但是 ie10 以上版本才支持

该属性用于元素中添加,移除及切换 CSS 类,有以下方法

# 添加类

element.classListadd (‘类名’)

focus.classList.add('current');

# 移动类

element.classList.remove (‘类名’)

focus.classList.remove('current');

# 切换类

element.classList.toggle (‘类名’)

focus.classList.toggle('current');

# click 延时解决方案

移动端 click 事件会有 300ms 的延迟,原因是移动端屏幕双击缩放(double tap to zoom)页面

解决方案

  • 禁用缩放,浏览器禁用默认的双击缩放行为并且去掉 300ms 的点击延迟
  • 利用 touch 事件自己封装这个事件解决的 300ms 延迟
<meta name="viewport" content="user-scalable=no">

原理:

  • 当我们手指触摸屏幕,记录当时触摸时间
  • 当我们手指离开屏幕,用离开的时间减少去触摸时间
  • 如果时间小于 150ms,并且没有滑动过屏幕,我们就定义为点击

# 移动端常用开发软件

# 什么是插件

  • 移动端要求是快速开发,所以我们经常会借助一些插件来帮我完成操作
  • JS 插件就是 js 文件,它遵循一定的规范编写,方便程序展示效果,拥有特定功能且方法调用,如轮播图和瀑布流插件
  • 特点:它是为了解决某个问题而单独存在的,功能单一,并且比较小巧

# fastclick 插件

# 引入文件

<script src="fastclick.js"></script>

# 使用

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

# Swiper 插件的使用

# 引入插件相关文件

<!-- 引入 swipercss 文件 -->
<link rel="stylesheet" href="css/swiper.min.css">
<!-- 引入 swiper js 文件 -->
<script src="js/swiper.min.js"></script>

# 按照规定语法使用

window.addEventListener('load', function() {
    var swiper = new Swiper('.swiper-container', {
        spaceBetween: 30,
        centeredSlides: true,
        autoplay: {
            delay: 5000,
            disableOnInteraction: false,
        },
        pagination: {
            el: '.swiper-pagination',
            clickable: true,
        },
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
        },
    });
})

# 移动端常用开发框架

# 框架概述

  • 框架,顾名思义就是一套框架,它会基于自身的特点向用户提供一套较为完整的解决方案,框架的控制在框架本身,使用者要按照框架规定的某种规范进行开发
  • 插件是为了解决某个问题专门存在,功能单一,并且比较小
  • 前端常用的开发框架有 Bootstrap,Vue,Angular,React 等,既能开发 PC,也能开发移动端
  • 前端常用的移动端插件有 swiper,supersilde,iscrol 等
  • 框架:大而全,一套解决方案
  • 插件:小而专一,某个功能的解决方案

# Bootstrap

Bootstrap 是一个简洁,直观,强悍的前端开发框架,它让 web 开发更迅速,简单

它能开发 PC 端,也能开发移动端

Bootstrap JS 插件使用文件

  • 引入相关 js 文件
  • 复制 HTML 结构
  • 修改对应样式
  • 修改相关 JS 参数
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Baozi 微信支付

微信支付

Baozi 支付宝

支付宝

Baozi 微信

微信