一、1. Zepto是什么?
Zepto 是一个轻量级的针对现代高级浏览器的 JavaScript库, 它与jQuery有着类似的api, 如果你会用jQuery,那么你也会用Zepto;
既然和jQuery差不多, 为什么还需要Zepto?
2.1jQuery更多是在PC端被应用,Zepto更多是在移动端被应用;
也正是因为jQuery用在PC端, 所以jQuery考虑了很多低级浏览器的的兼容性问题, ,所以代码更多体积更大;
也正是因为Zepto用在移动端, 所以Zepto则是直接抛弃了低级浏览器的适配问题 , 所以代码更少体积更小;
2.2综上所述: Zepto其实就是专门用于移动端的轻量级的jQuery;
官方网址:
英文版:http://zeptojs.com/
中文版:http://www.css88.com/doc/zeptojs_api/
找到github下载按钮,进入页面下载后,在下列地址中找到zepto.js,导入HTML文件中;
路径: \zepto-master\zepto-master\src
Zepto的特点
Zepto采用了模块化的开发, 将不同的功能放到了不同的模块中, 在使用的过程中我们可以按需导入, 也就是需要什么功能就导入什么模块;
Zepto注意点
如果是从官方网站下载的, 那么已经包含了默认的一些模块;
如果是从github下载的, 那么需要我们自己手动导入每一个模块;
当然后续学习了NodeJS后, 我们也可以自己定制;
例:点击按钮改变背景颜色
<html lang="en"><head><meta charset="UTF-8"><title>01-zepto初体验</title><style>*{margin: 0;padding: 0;}p{width: 200px;height: 200px;background: skyblue;}</style><!--<script src="js/jquery-3.1.1.js"></script>--><script src="js/zepto.js"></script><script src="js/event.js"></script> // 在对应下载文件中有这个文件</head><body><button>我是按钮</button><p></p><script>$("button").click(function () {$("p").css({backgroundColor: "red"});});</script></body>
二、zepto选择器
Zepto选择器:
Zepto是模块化开发的, zepto.js核心模块中只包含了基础功能;
如果想使用高级的选择器必须还要引入高级选择器模块;
三、zepto动画
1.zepto动画:
Zepto是模块化开发的, zepto.js核心模块中只包含了基础功能,如果想使用动画必须引入动画模块;
2.zepto动画注意点:
由于zepto是一个轻量级的针对现代高级浏览器的 JavaScript库
不需要兼容低级浏览器, 所以zepto中的动画是通过CSS3属性来实现动画的
而jQuery中是通过DOM来实现动画的
<head><meta charset="UTF-8"><title>03-zepto动画</title><style>*{margin: 0;padding: 0;}p{width: 200px;height: 200px;background: red;/*display: none;*/}</style><script src="js/zepto.js"></script><script src="js/event.js"></script><script src="js/fx.js"></script> // 含有动画模块<script src="js/fx_methods.js"></script> // 以动画形式的 show, hide, toggle, 和 fade*()方法.<!--<script src="js/jquery-3.1.1.js"></script>--></head><body><button>我是按钮</button><p></p><script>$("button").click(function () {// $("p").animate({marginLeft: 500}, 2000);// $("p").hide(2000);// $("p").show(2000);$("p").toggle(2000); // 显示与隐藏的切换});</script></body>
四、Zepto-tap事件
1.无论PC端还是移动端都支持click事件,而且不仅仅是jQuery和Zepto支持, 原生的JS也支持;
2.移动端click事件注意点:
在企业开发中如果需要在移动端监听点击事件, 一般不会使用click来监听, 因为移动端的事件很多(单击/双击/轻扫/捏合/拖拽等等);
所以如果通过click来监听,系统需要花费100~300毫秒判断到底是什么事件, 而移动端对事件的响应速度要求很高, 事件响应越快用户体验就越好, 所以如果需要在移动端监听点击事件, 那么请使用tap事件;
3.tap事件
tap事件是Zepto自己封装的一个事件, 解决了原生click事件100~300毫秒的延迟问题
<head><meta charset="UTF-8"><!--在移动端中,需要导入到文件 快捷键:meta:vp--><meta name="viewport" content="width=device-width, initial-scale=1.0"> <style>*{margin: 0;padding: 0;}p{width: 200px;height: 200px;margin: 0 auto;background: red;}</style><!--<script src="js/jquery-3.1.1.js"></script>--><script src="js/zepto.js"></script><script src="js/event.js"></script><script src="js/touch.js"></script> // 导入touch 文件</head><body><p></p><script>$("p").tap(function () {console.log("被点击了");});</script></body>
五、移动端Touch事件
1.Zepto是如何实现tap事件的?
虽然tap事件是Zepto自己封装的事件, 但是无论如何封装肯定都是通过原生JS来实现的
在原生的JS中专门为移动端新增了几个事件
touchstart: 手指按下
touchmove: 手指在元素上移动
touchend : 手指抬起
2.注意点:
这几个事件只支持移动端, 不支持PC端
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>05-移动端Touch事件</title><style>*{margin: 0;padding: 0;}p{width: 200px;height: 200px;background: red;}</style></head><body><p></p><script>let oDiv = document.querySelector("p");oDiv.ontouchstart = function () {console.log("手指按下");}oDiv.ontouchend = function () {console.log("手指抬起");}oDiv.ontouchmove = function () {console.log("手指移动");}</script></body>
六、移动端Touch事件对象
1.Touch事件对象
移动端的touch事件也是一个事件, 所以被触发的时候系统也会自动传递一个事件对象给我们
2.移动端touch事件对象中比较重要的三个子对象
touches: 当前屏幕上所有手指的列表
targetTouches: 保存了元素上所有的手指里列表
changedTouches: 当前屏幕上刚刚接触的手指或者离开的手指
touches和targetTouches
如果都是将手指按到了同一个元素上, 那么这两个对象中保存的内容是一样的;
如果是将手指按到了不同的元素上, 那么这个两个对象中保存的内容不一样;
touches保存的是所有元素中的手指, 而targetTouches保存的是当前元素中的手指;
changedTouches
在ontouchstart中保存的是刚刚新增的手指;
在ontouchend中保存的是刚刚离开的手指;
let oDiv1 = document.querySelector(".box1");oDiv1.ontouchstart = function (event) {console.log("按下", event.changedTouches);}oDiv1.ontouchend = function (event) {console.log("抬起", event.changedTouches);}
七、移动端Touch事件位置
手指的位置
1.screenX/screenY是相对于屏幕左上角的偏移位
2.clientX/clientY是相对于可视区域左上角的偏移位
3.pageX/pageY是相对于内容左上角的偏移位 <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>08-移动端手指位置练习</title><style>*{margin: 0;padding: 0;}p{width: 100px;height: 100px;background: red;}</style></head><body><p></p><script>/*需求: 通过手指拖拽p*/let oDiv = document.querySelector("p");let startX = 0;let startY = 0;let flag = false;oDiv.ontouchstart = function (event) {if(flag){return}flag = true;startX = event.targetTouches[0].clientX;startY = event.targetTouches[0].clientY;}oDiv.ontouchmove = function (event) {let moveX = event.targetTouches[0].clientX;let moveY = event.targetTouches[0].clientY;let offsetX = moveX - startX;let offsetY = moveY - startY;oDiv.style.transform = `translate(${offsetX}px, ${offsetY}px)`;}</script></body>
八、移动端点透问题
移动端点透问题
当一个元素放覆盖了另一个元素, 覆盖的元素监听touch事件,而下面的元素监听click事件;
并且touch事件触发后覆盖的元素就消失了, 那么就会出现点透问题;
移动端点透问题出现的原因
2.1当手指触摸到屏幕的时候,系统生成两个事件,一个是touch 一个是click
2.2touch事件先执行, 执行完后从文档上消失
2.3click事件有100~300ms延迟, 所以后执行
2.4但click事件执行的时候触发的元素已经消失了, 对应的位置现在是下面的元素, 所以就触发了下面元素的click事件
移动端点透问题解决方案
1.1在touch事件中添加 event.preverDefault();阻止事件扩散
1.2使用Zepto, 但是需要注意老版本的Zepto也会出现点透问题
1.3使用Fastclick, 最早解决点透问题的插件
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>10-移动端点透问题</title><style>*{margin: 0;padding: 0;}p{text-align: center;font-size: 40px;}.click{width: 300px;height: 300px;background: red;position: absolute;left: 50%;transform: translateX(-50%);top: 100px;}.tap{width: 200px;height: 200px;background: blue;position: absolute;left: 50%;transform: translateX(-50%);top: 150px;}</style></head><body><p class="click">click</p><p class="tap">tap</p><script>let oClick = document.querySelector(".click");let oTap = document.querySelector(".tap");oTap.ontouchstart = function (event) {this.style.display = "none";event.preventDefault(); // 阻止事件扩散}oClick.onclick = function () {console.log("click");}</script></body>
九、滑动事件(Swipe)
1.什么是轻扫事件?
手指快速的往左边滑动 /或者右边滑动 /或者上边滑动 /或者下边滑动
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>12-zepto-滑动事件</title><style>*{margin: 0;padding: 0;}p{width: 100px;height: 100px;background: red;margin-left: 100px;margin-top: 100px;}</style><script src="js/zepto.js"></script><script src="js/event.js"></script><script src="js/touch.js"></script><script src="js/fx.js"></script></head><body><p></p><script>$("p").swipeLeft(function () {// console.log("向左边轻扫");$(this).animate({marginLeft: "0"}, 2000);});$("p").swipeRight(function () {// console.log("向右边轻扫");$(this).animate({marginLeft: "100px"}, 2000);});$("p").swipeUp(function () {// console.log("向上边轻扫");$(this).animate({marginTop: "0"}, 2000);});$("p").swipeDown(function () {// console.log("向下边轻扫");$(this).animate({marginTop: "100px"}, 2000);});</script></body>
-End