为何使用zepto
    zepto主要适用于移动端,所以不用考虑低端浏览器的兼容性问题,因此相较于jQuery有很大的优势。
zepto分为很多模块,要使用哪个模块就需要导入哪个模块。
zepto选择器
zepto选择器与jQuery类似,但是如果要使用高级选择器就需要导入zepto中的selector模块。
<script src="js/selector.js"></script>
<script>
    $("button").click(function() {
        $("div:first").css({
            backgroundColor: "red"
        });
    })
</script>
zepto动画
在zepto中使用ainimate,需要导入fx.js;使用hidden(),show(),toggle()等方法时,需要导入fx_methods.js。
<script src="js/fx_methods.js"></script>
<script src="js/fx.js"></script>
<script>
    $("button").click(function() {
        $("div").animate({
            marginLeft: 500
        }, 2000)
        // $("div").hide(2000);
        // $("div").show(2000);
        // $("div").toggle(2000);
    })
</script>
zepto tap事件
移动端中一般很少使用click来监听事件。在移动端中有很多(单击,双击,拖拽,捏合等)事件,所以click在移动端中至少要花100-300毫秒来判断到底是什么事件。而移动端用对性能要求很高,事件响应自然也是越快越好,因此我们在移动端中通常使用tap事件。
tap事件不是原生的js事件,而是zepto自己封装的事件,解决了click判断事件需要100-300毫秒的问题。(只适用于移动端)
<script src="js/zepto.js"></script>
    <script src="js/event.js"></script>
    <script src="js/touch.js"></script>
    <script>
        $("div").tap(function() {
            console.log("被点击了");
        })
    </script>
tap是zepto自己封装的方法,但是也是用原生js实现的。原生js中新增了几个只适用于移动端的事件
- touchstart:手指按下
- touchmove:手指移动
- touchend:手指抬起
移动端touch事件对象中比较重要的三个子对象
- touches: 当前屏幕上所有手指的列表
- targetTouches: 保存了元素上所有的手指里列表
- changedTouches: 当前屏幕上刚刚接触的手指或者离开的手指
利用zepto做一个移动div小练习
下面代码有bug,但是目前没有找到原因,因此我一般都是写原生js或者jQuery。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/zepto.js"></script>
    <script src="js/event.js"></script>
    <script src="js/touch.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
            width: 200px;
            height: 200px;
            background: red;
            margin: 150px auto;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        let startX = 0;
        let startY = 0;
        let more = false;
        let oDiv = document.querySelector("div");
        oDiv.ontouchstart = function(e) {
            // console.log("移动了");
            if (more) {
                return
            }
            startX = e.targetTouches[0].clientX;
            startY = e.targetTouches[0].clientY;
            // console.log(startX, startY);
        }
        oDiv.ontouchmove = function(e) {
            let moveX = e.targetTouches[0].clientX - startX;
            let moveY = e.targetTouches[0].clientY - startY;
            console.log(moveX, moveY);
            oDiv.style.transform = `translate(${moveX}px, ${moveY}px)`;
        }
    </script>
</body>
</html>