• Javascript【触屏事件、移动端常见特效、移动端常用开发插件、移动端常用开发框架】



    1. 触屏事件

    1.1 触屏事件概述

    移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。比如触屏事件 touch(也称触摸事件),Android 和 IOS 都有。

    touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。

    常见的触屏事件如下:
    在这里插入图片描述

    <div></div>
        <script>
            // 1. 获取元素
            // 2. 手指触摸DOM元素事件
            var div = document.querySelector('div');
            div.addEventListener('touchstart', function() {
                console.log('我摸了你');
    
            });
            // 3. 手指在DOM元素身上移动事件
            div.addEventListener('touchmove', function() {
                console.log('我继续摸');
    
            });
            // 4. 手指离开DOM元素事件
            div.addEventListener('touchend', function() {
                console.log('轻轻的我走了');
    
            });
        </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1.2 触摸事件对象(TouchEvent)

    TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等

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

    触摸事件对象重点我们看三个常见对象列表:
    在这里插入图片描述
    因为平时我们都是给元素注册触摸事件,所以重点记住 targetTocuhes

    1.3 移动端拖动元素

    1. touchstart、touchmove、touchend 可以实现拖动元素
    2. 但是拖动元素需要当前手指的坐标值 我们可以使用 targetTouches[0] 里面的pageX 和 pageY
    3. 移动端拖动的原理: 手指移动中,计算出手指移动的距离。然后用盒子原来的位置 + 手指移动的距离
    4. 手指移动的距离: 手指滑动中的位置 减去 手指刚开始触摸的位置
      拖动元素三步曲:
      (1) 触摸元素 touchstart: 获取手指初始坐标,同时获得盒子原来的位置
      (2) 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子
      (3) 离开手指 touchend:

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

    <div></div>
        <script>
            // (1) 触摸元素 touchstart:  获取手指初始坐标,同时获得盒子原来的位置
            // (2) 移动手指 touchmove:  计算手指的滑动距离,并且移动盒子
            // (3) 离开手指 touchend:
            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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2. 移动端常见特效

    案例:移动端轮播图

    3. 移动端常用开发插件

    3.1 什么是插件

    移动端要求的是快速开发,所以我们经常会借助于一些插件来帮我完成操作,那么什么是插件呢?

    JS 插件是 js 文件,它遵循一定规范编写,方便程序展示效果,拥有特定功能且方便调用。如轮播图和瀑布流插件。
    特点:它一般是为了解决某个问题而专门存在,其功能单一,并且比较小。比如移动端常见插件:iScroll、Swiper、SuperSlider 。

    3.2 插件的使用

    1. 引入 js 插件文件。
    2. 按照规定语法使用。

    3.3 Swiper 插件的使用

    中文官网地址:https://www.swiper.com.cn/

    3.4 其他移动端常见插件

    • superslide: http://www.superslide2.com/
    • iscroll:https://github.com/cubiq/iscroll

    3.5 click 延时解决方案

    移动端 click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放(double tap to zoom) 页面。
    解决方案:

    1. 禁用缩放。 浏览器禁用默认的双击缩放行为并且去掉 300ms 的点击延迟。
      <meta name="viewport" content="user-scalable=no">
    
    • 1
    1. 使用插件。 fastclick 插件解决 300ms 延迟。
       document.addEventListener('DOMContentLoaded',function () {
            /*等页面文档加载完成  不需要等所有的资源*/
            FastClick.attach(document.body);
        });
    
    • 1
    • 2
    • 3
    • 4

    3.6 移动端视频插件 zy.media.js

    H5 给我们提供了 video 标签,但是浏览器的支持情况不同。在移动端我们可以使用插件方式来制作。

     	<link rel="stylesheet" href="zy.media.min.css">
        <script src="zy.media.min.js">script>
        <style type="text/css">
            #modelView {
                background-color: #DDDDDD;
                z-index: 0;
                opacity: 0.7;
                height: 100%;
                width: 100%;
                position: relative;
            }
            
            .playvideo {
                padding-top: auto;
                z-index: 9999;
                position: relative;
                width: 300px;
                height: 200px;
            }
            
            .zy_media {
                z-index: 999999999
            }
        style>
    
    head>
    
    <body>
    
        <div class="playvideo">
            <div class="zy_media">
                <video data-config='{"mediaTitle": "小蝴蝶"}'>
                        <source src="mov.mp4" type="video/mp4">
                        您的浏览器不支持HTML5视频
                    video>
    
            div>
            <div id="modelView"> div>
        div>
        <script>
            zymedia('video', {
                autoplay: false
            });
        script>
    
    body>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    4. 移动端常用开发框架

    4.1 框架概述

    框架,顾名思义就是一套架构,它会基于自身的特点向用户提供一套较为完整的解决方案。框架的控制权在框架本身,使用者要按照框架所规定的某种规范进行开发。

    前端常用的框架有 Bootstrap、Vue、Angular 等。

    4.2 Bootstrap

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

    DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Documenttitle>
        //引入文件
        <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
        <script src="bootstrap/js/jquery.min.js">script>
        <script src="bootstrap/js/bootstrap.min.js">script>
        <style>
            .focus {
                width: 800px;
                height: 300px;
                background-color: pink;
                margin: 100px auto;
            }
            
            .carousel,
            .carousel img {
                width: 100%;
                height: 300px!important;
            }
        style>
    head>
    
    <body>
        <div class="focus">
            <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
                
                <ol class="carousel-indicators">
                    <li data-target="#carousel-example-generic" data-slide-to="0" class="active">li>
                    <li data-target="#carousel-example-generic" data-slide-to="1">li>
                    <li data-target="#carousel-example-generic" data-slide-to="2">li>
                ol>
    
                
                <div class="carousel-inner" role="listbox">
                    <div class="item active">
                        <img src="upload/banner.dpg" alt="...">
                        <div class="carousel-caption">
                            这是我的图片1
                        div>
                    div>
                    <div class="item">
                        <img src="upload/banner1.dpg" alt="...">
                        <div class="carousel-caption">
                            这是我的图片2
                        div>
                    div>
                    <div class="item">
                        <img src="upload/banner2.dpg" alt="...">
                        <div class="carousel-caption">
                            这是我的图片3
                        div>
                    div>
                    ...
                div>
    
                
                <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
                    <span class="glyphicon glyphicon-chevron-left" aria-hidden="true">span>
                    <span class="sr-only">Previousspan>
                a>
                <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
                    <span class="glyphicon glyphicon-chevron-right" aria-hidden="true">span>
                    <span class="sr-only">Nextspan>
                a>
            div>
        div>
        <script>
            $('.carousel').carousel({
                interval: 2000
            })
        script>
    body>
    
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    4.3 MUI 原生UI前端框架

    MUI 是一个专门用于做手机 APP 的前端框架。

    MUI 的 UI 设计理念是:以 IOS 为基础,补充 Android 平台特有的控件。因此 MUI 封装的控件,UI 上更符合app 的体验。

    MUI 中文官网地址:http://dev.dcloud.net.cn/mui/

    1. 本地存储

    随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,HTML5规范提出了相关解决方案。

    本地存储特性

    1、数据存储在用户浏览器中
    2、设置、读取方便、甚至页面刷新不丢失数据
    3、容量较大,sessionStorage约5M、localStorage约20M
    4、只能存储字符串,可以将对象JSON.stringify() 编码后存储

    2. window.sessionStorage

    1、生命周期为关闭浏览器窗口
    2、在同一个窗口(页面)下数据可以共享
    3. 以键值对的形式存储使用

    存储数据:

    sessionStorage.setItem(key, value)
    
    • 1

    获取数据:

    sessionStorage.getItem(key)
    
    • 1

    删除数据:

    sessionStorage.removeItem(key)
    
    • 1

    删除所有数据:

    sessionStorage.clear()
    
    • 1
    <input type="text">
        <button class="set">存储数据</button>
        <button class="get">获取数据</button>
        <button class="remove">删除数据</button>
        <button class="del">清空所有数据</button>
        <script>
            console.log(localStorage.getItem('username'));
    
            var ipt = document.querySelector('input');
            var set = document.querySelector('.set');
            var get = document.querySelector('.get');
            var remove = document.querySelector('.remove');
            var del = document.querySelector('.del');
            set.addEventListener('click', function() {
                // 当我们点击了之后,就可以把表单里面的值存储起来
                var val = ipt.value;
                sessionStorage.setItem('uname', val);
                sessionStorage.setItem('pwd', val);
            });
            get.addEventListener('click', function() {
                // 当我们点击了之后,就可以把表单里面的值获取过来
                console.log(sessionStorage.getItem('uname'));
    
            });
            remove.addEventListener('click', function() {
                // 
                sessionStorage.removeItem('uname');
    
            });
            del.addEventListener('click', function() {
                // 当我们点击了之后,清除所有的
                sessionStorage.clear();
    
            });
        </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    3. window.localStorage

    1、声明周期永久生效,除非手动删除 否则关闭页面也会存在
    2、可以多窗口(页面)共享(同一浏览器可以共享)
    3. 以键值对的形式存储使用

    存储数据:

    localStorage.setItem(key, value)
    
    • 1

    获取数据:

    localStorage.getItem(key)
    
    • 1

    删除数据:

    localStorage.removeItem(key)
    
    • 1

    删除所有数据:

    localStorage.clear()
    
    • 1
     <input type="text">
        <button class="set">存储数据</button>
        <button class="get">获取数据</button>
        <button class="remove">删除数据</button>
        <button class="del">清空所有数据</button>
        <script>
            var ipt = document.querySelector('input');
            var set = document.querySelector('.set');
            var get = document.querySelector('.get');
            var remove = document.querySelector('.remove');
            var del = document.querySelector('.del');
            set.addEventListener('click', function() {
                var val = ipt.value;
                localStorage.setItem('username', val);
            })
            get.addEventListener('click', function() {
                console.log(localStorage.getItem('username'));
    
            })
            remove.addEventListener('click', function() {
                localStorage.removeItem('username');
    
            })
            del.addEventListener('click', function() {
                localStorage.clear();
    
            })
        </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    案例:记住用户名

    如果勾选记住用户名, 下次用户打开浏览器,就在文本框里面自动显示上次登录的用户名

    • 把数据存起来,用到本地存储
    • 关闭页面,也可以显示用户名,所以用到localStorage
    • 打开页面,先判断是否有这个用户名,如果有,就在表单里面显示用户名,- 并且勾选复选框
    • 当复选框发生改变的时候 change事件
    • 如果勾选,就存储,否则就移除
     <input type="text" id="username"> <input type="checkbox" name="" id="remember"> 记住用户名
        <script>
            var username = document.querySelector('#username');
            var remember = document.querySelector('#remember');
            if (localStorage.getItem('username')) {
                username.value = localStorage.getItem('username');
                remember.checked = true;
            }
            remember.addEventListener('change', function() {
                if (this.checked) {
                    localStorage.setItem('username', username.value)
                } else {
                    localStorage.removeItem('username');
                }
            })
        script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    PlayWright(十二)- PO模式
    数据结构HW1
    SOA、ESB、微服务、分布式概念及专业名词阐述
    MySQL-DML【数据操作语言】(图码结合)
    2022 年杭电多校第九场补题记录
    刷题记录:牛客NC15052求最值
    LIO-EKF: 运行数据UrbanNav与mid360设备详细教程
    【reverse】buu-[Zer0pts2020]easy_strcmp——main函数的启动过程+IDA动态调试ELF
    05.智慧商城——路由前置守卫、首页动态渲染
    【入门】求n个数中出现次数最多的数
  • 原文地址:https://blog.csdn.net/m0_52896752/article/details/127575190