当前位置:首页 » 《随便一记》 » 正文

webAPI中的触屏事件、轮播图、插件以及本地存储

20 人参与  2024年11月06日 09:22  分类 : 《随便一记》  评论

点击全文阅读


一、触屏事件

1.触屏事件概述

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

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

2.常见的触屏事件

触屏事件说明
touchstart手指触摸到一个DOM元素的时候触发
touchmove手指在一个DOM元素上滑动的时候出发
touchend手指从一个dom元素上移开的时候触发

3.触摸事件对象(touchEvent)

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

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

因为平时我们都是给元素注册触摸事件,所以注意targetTouches

二、移动端常见特效

1.移动轮播图

移动端轮播图功能和pc基本一致

可以自动播放图片手指可以拖动播放轮播图
window.addEventListener('load', function () {    //alert(1);    //1.获取元素    var focus = document.querySelector('.focus');    var ul = focus.children[0];   //这是第一个子元素    var ol = focus.children[1];     //第二个子元素    //获赠个div的宽度    var w = focus.offsetWidth;    var index = 0; //图片的索引    //2.利用定时器自动轮播图片    var timer = setInterval(function(){        index++;//索引加1        var translateX = -index * w; //移动的距离        ul.style.transition = 'all .3s'  //动画持续时间        ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离    },2000);    //等着我们过渡完成后,再去判断是否超过索引     // transitionend 事件在 CSS 完成过渡后触发。    ul.addEventListener('transitionend',function(){        if(index >= 3){            index = 0; //如果超过了最大索引回到0所以,就是第一张图片            ul.style.transition = 'none'  //动画持续时间            var translateX = -index * w; //移动的距离            ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离        } else if(index < 0){            index = 2;  //如果小于最小的索引,就到最后一张图片            ul.style.transition = 'none'  //动画持续时间            var translateX = -index * w; //移动的距离            ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离        }        //3.小圆点跟着变化        //把ol里面li带有current的类名选出来去掉类名,给当前的加上current        ol.querySelector('.current').classList.remove('current');  //大家也可以用排他,全部干掉        //让当前的索引号的小li加上current        ol.children[index].classList.add('current');    });    //4.手指滑动轮播图    //通过触摸元素(touchstart):获取手指初始位置坐标    var startX = 0;    var startY = 0;    //添加手指触摸事件    ul.addEventListener('touchstart',function(e){        startX = e.targetTouches[0].pageX;        //手指摸到轮播图,那么就该停止轮播(停止定时器)        clearInterval(timer);    });    var moveX = 0; //在手指离开后我们要用这个距离做计算    var flag = false;//如果用户手指移动过,我们再去判断是否要做判断效果    //移动手指touchmove,计算手指的滑动距离,并且移动盒子    ul.addEventListener('touchmove',function(e){        //计算移动距离        moveX = e.targetTouches[0].pageX - startX;        //移动盒子,盒子原来位置+手指移动的距离        var translateX = -index * w + moveX;        //手指拖动的时候,不许哟动画效果,所以要取消过渡动画效果        ul.style.transition = 'none'  //动画持续时间        ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离        flag = true; //表示用户的手指动过轮播图        //阻止屏幕滚动行为        e.preventDefault();    });    //手指离开,根据移动距离去判断是回弹还是播放上一张,下一张    ul.addEventListener('touchend',function(e){        if(flag){ //用户的手指拖动过轮播图            //(1)如果移动的距离大于50像素,我们就播放上一张或一张            if(Math.abs(moveX) > 50){                //如果用户是右滑播放的就是上一张,moveX是正值                if(moveX > 0){                    index--;                } else {                    //如果是左滑就播放下一张,moveX就是负值                    index++;                }                var translateX = -index * w; //移动的距离                ul.style.transition = 'all .3s'  //动画持续时间                ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离            } else {                //(2)如果移动的距离小于50像素我们就弹回去                var translateX = -index * w; //移动的距离                ul.style.transition = 'all .3s'  //动画持续时间                ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离            }        }        //手指离开的时候重新开启定时器        clearInterval(timer);        timer = setInterval(function(){            index++;//索引加1            var translateX = -index * w; //移动的距离            ul.style.transition = 'all .3s'  //动画持续时间            ul.style.transform = 'translateX('+translateX+'px)'; //移动的距离        },2000);    });});

2.返回顶部

//返回顶部模块var goBack = this.document.querySelector('.goBack');var nav = this.document.querySelector('nav');window.addEventListener('scroll',function(){    if(window.pageYOffset >= nav.offsetTop){        goBack.style.display = 'block'    } else {        goBack.style.display = 'none'    }});//点击后返回顶部goBack.addEventListener('click',function(){    window.scrollTo(0,0);});

3.classList属性

classList属性是HTML5新增的一个属性,返回元素的类名

该属性用于元素中添加、移除以及切换css类

3.1 添加类

//语法element.classList.add('类名');
//如:focus.classList.add('current');

3.2 移除类

//语法element.classList.remove('类名');
//如:focus.classList.remove('current');

3.3 切换类

//语法element.classList.toggle('类名');
//如:focus.classList.toggle('current');
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>02classList属性</title>    <style>        .bg{            background-color: black;        }    </style></head><body>    <div class="one two three">123</div>    <button>开关灯</button>    <script>        //classList返回的是元素的类名        var div = document.querySelector('div');        console.log(div.classList[1]);        //1.添加类选择器        div.classList.add('abc');        //2.删除类名        div.classList.remove('one');        //3.切换类        var btn = document.querySelector('button');        btn.addEventListener('click',function(){            document.body.classList.toggle('bg');        })    </script></body></html>

4.click延时解决方案

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

解决方案:

进制缩放,浏览器禁用默认双击缩放行为可以去掉300ms的点击延迟

<meta name="viewport" content="user-scalable=no">

利用touch事件自己封装这个事件解决300ms延迟

原理: 当我们手指触摸屏幕,记录当前触摸事件当我们的手指离开屏幕,用离开的事件减去触摸的事件如果时间小于150ms,并且没有滑动过屏幕,那我们就定义为点击
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>03使用插件解决延迟300ms问题</title>    <script src="fastclick.js"></script></head><body>    <div>123</div>    <script>        if('addEventListener' in document){            document.addEventListener('DOMContentLoaded',function(){                FastClick.attach(document.body);            },false);        }        var div = document.querySelector('div');        div.addEventListener('click',function(){            alert(1111111);        });    </script></body></html>

三、移动端开发常用开发插件

1.什么是插件

移动端要求的是快速开发,所以我们经常借助一些插件来帮助我们完成操作。

JS插件就是js文件,它遵循一定规则编写,方便程序展示效果,拥有特定功能且方便调用,如:轮播图、瀑布流。

特点:它一般是为了解决某个问题而专门存在,其功能单一,并且比较小

fastclick.js就属于一个插件

2.插件的使用

第一步:引入js文件按照规定的语法使用
if('addEventListener' in document){    document.addEventListener('DOMContentLoaded',function(){        FastClick.attach(document.body);    },false);}

3.Swiper

官网:https://swiper.com.cn/

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>04swiper轮播图</title>    <link rel="stylesheet" href="swiper/swiper-bundle.css">    <style>        .swiper {            width: 600px;            height: 300px;        }          .swiper img{            width: 100%;            height: 100%;        }        .swiper-slide{            width:300px;/*设为固定值*/            width:auto;/*根据内容调整宽度*/        }    </style></head><body>    <div class="swiper">        <div class="swiper-wrapper">            <div class="swiper-slide"><img src="images/focus1.jpg" alt=""></div>            <div class="swiper-slide"><img src="images/focus2.jpg" alt=""></div>            <div class="swiper-slide"><img src="images/focus3.jpg" alt=""></div>            <div class="swiper-slide"><img src="images/focus4.jpg" alt=""></div>        </div>        <!-- 如果需要分页器 -->        <div class="swiper-pagination"></div>                <!-- 如果需要导航按钮 -->        <div class="swiper-button-prev"></div>        <div class="swiper-button-next"></div>                <!-- 如果需要滚动条 -->        <div class="swiper-scrollbar"></div>    </div>        <script src="swiper/swiper-bundle.min.js"></script>    <script>                var mySwiper = new Swiper ('.swiper', {          autoplay:{  //自动播放相关            delay: 1000,            stopOnLastSlide: false          },          //slidesPerView : 3,           effect: 'coverflow',            slidesPerView: 3,            centeredSlides: true,           //direction: 'vertical', // 垂直切换选项          loop: true, // 循环模式选项                    // 如果需要分页器          pagination: {            el: '.swiper-pagination',          },                    // 如果需要前进后退按钮          navigation: {            nextEl: '.swiper-button-next',            prevEl: '.swiper-button-prev',          },                    // 如果需要滚动条          scrollbar: {            el: '.swiper-scrollbar',          },        })                </script></body></html>

4.media

移动端视频框架

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

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>05视频插件</title>    <link rel="stylesheet" href="media/zy.media.min.css"> </head><body>    <div class="playvideo">        <div class="zy_media">            <video poster="bx.png" data-config='{"mediaTitle": "《疯狂动物城》--腾讯视频"}'>                <source src="media/mov.mp4" type="video/mp4">                    您的浏览器不支持HTML5视频            </video>        </div>    </div>    <script src="media/zy.media.min.js"></script>    <script>        zymedia('video',{            autoplay:true,            alwaysShowControls: false        });    </script></body></html>

四、本地存储

1.概念

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

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

2.sessionStorage

生命周期为关闭浏览器窗口在同一个窗口(页面)下数据可以共享以键值对的形式存储使用 (name:‘张三’)

2.1 存储数据的语法

sessionStorage.setItem(key,value);

2.2 获取数据的语法

sessionStorage.getItem(key);

2.3 删除数据

sessionStorage.removeItem(key);

2.4 清空所有数据

sessionStorage.clear()
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>06本地存储-sessionStorage</title></head><body>    <input type="text">    <button class="set">存储数据</button>    <button class="get">获取数据</button>    <button class="remove">删除数据</button>    <button class="removeAll">删除全部数据</button>    <script>        var input = document.querySelector('input');        var set = document.querySelector('.set');        var get = document.querySelector('.get');        var remove = document.querySelector('.remove');        var removeAll = document.querySelector('.removeAll');        //添加数据        set.addEventListener('click',function(){            //点击按钮后,将数据存储到sessionStorage中            var val = input.value;            sessionStorage.setItem('username',val);        });        //获取数据        get.addEventListener('click',function(){            //点击按钮后,将数据从sessionStorage中取出            var val = sessionStorage.getItem('username');            console.log('从sesisonStorage中取出的key是username的值:' + val);        });        //删除数据        remove.addEventListener('click',function(){            //点击按钮后,将数据从sessionStorage中删除            sessionStorage.removeItem('username');        });        //删除全部数据        removeAll.addEventListener('click',function(){            //点击按钮后,将数据从sessionStorage中全部数据删除            sessionStorage.clear();        });    </script></body></html>

3.localStorage

生命周期永久生效,除非手动删除,否则关闭页面也会存在可以多个窗口(页面)共享同一个数据(同一个浏览器的多个窗口可以共享数据)以键值对的形式存储数据

3.1 存储数据

localStorage.setItem(key,value);

3.2 获取数据

localStorage.getItem(key);

3.3删除数据

localStorage.removeItem(key);
//清空所有数据localStorage.clear();
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>07本地存储-localStorage</title></head><body>    <div>        用户名:<input type="text" id="username">        <br/>        密码:<input type="text" id="pwd">    </div>        <button class="set">存储数据</button>    <button class="get">获取数据</button>    <button class="remove">删除数据</button>    <button class="removeAll">删除全部数据</button>    <script>        var username = document.querySelector('#username');        var password = document.querySelector('#pwd');        var set = document.querySelector('.set');        var get = document.querySelector('.get');        var remove = document.querySelector('.remove');        var removeAll = document.querySelector('.removeAll');        //添加数据        set.addEventListener('click',function(){            //点击按钮后,将数据存储到localStorage中            var name = username.value;            var pwd = password.value;            localStorage.setItem('username',name);            localStorage.setItem('pwd',pwd);        });                //获取数据        get.addEventListener('click',function(){            //点击按钮后,将数据从localStorage中取出            var name = localStorage.getItem('username');            console.log('从localStorage中取出的key是username的值:' + name);            var pwd = localStorage.getItem('pwd');            console.log('从localStorage中取出的key是pwd的值:' + pwd);        });                //删除数据        remove.addEventListener('click',function(){            //点击按钮后,将数据从localStorage中删除            localStorage.removeItem('pwd');        });        //删除全部数据        removeAll.addEventListener('click',function(){            //点击按钮后,将数据从localStorage中全部数据删除            localStorage.clear();        });    </script></body></html>

点击全文阅读


本文链接:http://zhangshiyu.com/post/183064.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1