一、触屏事件
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++;//索引加1var 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)';//移动的距离}elseif(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++;//索引加1var 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
<!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 =newSwiper('.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>
版权归原作者 努力变厉害的小超超 所有, 如有侵权,请联系我们删除。