Zepto入门详解

Zepto

用文档的话来说,Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api。 如果你会用jquery,那么你也会用zepto。

主要针对移动端,因为不兼容IE浏览器,所以更轻量级,体积更小,才10k左右,为移动端各事件提供很好的支持,但它也有部分API是和jQuery的实现方式是不同的

入门

引入zepto.min.js文件(可自行到官网或者菜鸟https://www.runoob.com/manual/zeptojs.html里面下载)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个Demo</title>
</head>
<body>
    <div></div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $('div').html("Hello Zepto")
    });
</script>
</html>

事件ready和onload的区别

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件ready和onload的区别</title>
</head>
<body>
    <script type="text/javascript" src="../js/zepto.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
           //DOM加载完毕,图片并未完全加载,调用时机比较快
        });
        $(function () {

        });
        $().ready(function () {
            
        })
        window.onload = function () {
            //全部文件加载完毕,调用时机比较久
        }
    </script>
</body>
</html>

zepto转Dom对象

如果需要用到原生js的api,可将zepto的对象和dom对象互相转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dom对象和zepto对象互转</title>
</head>
<body>
    <div id="two"></div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script>
    $(document).ready(function () {
        // zepto对象转DOM对象
        $('div')[0].className = "one"
        // dom对象转zepto对象
        $(two).addClass("two")
    });
</script>
</html>

选择器

选择器的使用基本跟jquery类似,基本选择器,后台选择器,子元素选择器,相邻元素选择器等等

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选择器</title>
</head>
<body>
    <div></div>
    <div id="demo1"></div>
    <div class="demo2"></div>
    <p class="p1"></p>
    <p class="p2"></p>
    <div id="demo3">
        <div class="one">
            <p>你好</p>
        </div>
    </div>
    <div id="demo4">
        <div class="two">
            <p>你好</p>
        </div>
    </div>
    <div id="demo5">
        <div>11</div>
        <p>22</p>
        <p>33</p>
    </div>
    <div id="demo6">
        <div>我是兄弟节点</div>
        <p>44</p>
        <p>55</p>
        <p>66</p>
    </div>
    <div id="demo7">
        <div title="demo8"></div>
        <div title="demo9"></div>
        <div title="demo10"></div>
        <div title="demo11"></div>
        <div title="demo12"></div>
    </div>
    <div id="demo13">
        <div>过滤1</div>
        <div>过滤2</div>
        <div>过滤3</div>
    </div>
</body>
    <script type="text/javascript" src="../js/zepto.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            //元素选择器
            //$('div').html("我是元素选择器")
            //id选择器
            $('#demo1').html("我是id选择器")
            //类选择器
            $('.demo2').html("我是类元素选择器")
            //群组选择器
            $('.p1,.p2').html("我们是群组选择器")
            //通配符选择器
            $('*').addClass("act")
            //后代选择器
            $("#demo3 .one p").css("color","red");
            //子元素选择器
            $("#demo4 > .two").css("font-size","30px")
            //相邻元素选择器
            $("#demo5 div + p").css("color","blue")
            //兄弟选择器
            $("#demo6 div ~ p").css("color","green")
            //属性过滤选择器
            $("#demo7 div[title='demo9']").html("属性过滤选择器")
            //子元素过滤选择器
            $("#demo13 div:nth-child(2)").html("我是子元素过滤选择器")
        })
    </script>
</html>

Zepto对DOM的操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>zepto对dom操作</title>
</head>
<body>
    <div id="demo">
        <div>
            <p>你好</p>
        </div>
    </div>
    <ul>
        <li>删除</li>
    </ul>
    <p>要被替换的节点</p>
    <p id="demo1">被包裹的节点</p>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //var $demo = $("<div class='cr'>被插入的div</div>")
        //$("#demo").append($demo); //元素插入到选中的元素后面
        //$demo.appendTo("#demo")
        //$("#demo").prepend($demo) //元素插入到选中元素的第一个
        //$demo.prependTo("#demo")
        //$("#demo").after($demo)  //插入到元素之后,同级别
        //$demo.insertAfter("#demo")
        //$("#demo").before($demo)

        //删除操作
        //$("ul li").remove() //节点删除
        //$("ul li").empty()
        //复制节点
        // $("ul li").click(function () {
        //     $(this).clone().appendTo("ul")
        // })
        // 替换节点replaceWith
        //$("p").replaceWith("<span>我已被替换</span>")
        //包裹节点 wrap
        $("#demo1").wrap("div")
    })
</script>
</html>

 Zepto对dom属性操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>zepto对dom属性操作</title>
    <style type="text/css">
        .red{
            color: red;
        }
        .lager{
            font-size: 30px;
        }
    </style>
</head>
<body>
    <div title="sx" class="red">属性操作</div>
    <button>按钮</button>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    //console.log($("div").attr("title"))  //获取属性值
    //$("div").attr("name","att") //添加属性值
    //$("div").attr({"name":"attr","class":"test"})//添加多个属性值
    //删除属性值
    //$("div").removeAttr("title")
    //添加样式操作
    //$("div").addClass("red lager")
    //删除样式
    //$("div").removeClass()
    //切换样式 toggle toggleClass(控制样式的添加和删除)
    $("button").click(function () {
        //$("div").toggle()
        $("div").toggleClass("red")
    });
    //判断是否含有某个样式 hasClass
    console.log($("div").hasClass("red"));
</script>
</html>

获取元素对象api

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="demo">
        <p>我是第一个元素</p>
        <h3>我是第二个元素</h3>
        <p>我是第三个元素</p>
    </div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //next是取得紧邻的后面的同辈元素
        console.log($("#demo p").next())
        //prev获取紧邻的前面的同辈元素
        console.log($("#demo h3").prev())
        //siblings获取前后的所有同辈元素
        console.log($("#demo h3").siblings())
        //获取直系父节点
        console.log($("#demo h3").parent())
        console.log($("#demo h3").parents())
    })
</script>
</html>

Zepto进行css样式修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>zepto中的css-dom操作</title>
</head>
<body>
    <div class="one">我是一个CSS的测试div</div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //$(".one").css("color","red").css("font-size","36px");
        $(".one").css({
            color:"blue",
            fontSize:"30px"
        });
        $(".one").width(500);
        $(".one").height(500);
        $(".one").css("background","red");
    })
</script>
</html>

事件绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件绑定</title>
</head>
<body>
    <div id="one">事件绑定</div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("#one").bind("click",function (ev) {
            console.log("我是bind方式的绑定")
        })
        $("#one").click(function (ev) {
            console.log("我是click方式的点击")
        })
        $("#one").on("click",function (ev) {
            console.log("我是on事件")
        })
    });
</script>
</html>

事件冒泡和事件捕获

Zepto不能进行事件捕获,所以需要用原生js,并将绑定事件默认值false改成true

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件冒泡和事件捕获</title>
</head>
<body>
    <div id="c">
        <div id="b">
            <div id="a">我是事件A</div>
        </div>
    </div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    //事件冒泡,从底到顶级冒泡,过程中凡是元素添加事件的,都会被执行
    $(document).ready(function () {
        $("#c").bind("click",function () {
            console.log("我是事件c")
        })
        $("#a").bind("click",function () {
            console.log("我是事件a")
        })
    });
    //从顶级到底,过程中凡是元素添加事件的,都会被执行
    // document.getElementById("a").addEventListener("click",function () {
    //     console.log("我是事件a")
    // },true);
    // document.getElementById("c").addEventListener("click",function () {
    //     console.log("我是事件c")
    // },true);
</script>
</html>

事件委托

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托代理</title>
</head>
<body>
<ul>
    <li>我是1</li>
    <li>我是2</li>
    <li>我是3</li>
    <li>我是4</li>
</ul>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //绑定事件非常消耗性能
        // $("li").bind("click",function () {
        //     console.log("我被bind事件绑定了")
        // })
        //click非常消耗性能
        // $("li").click(function () {
        //     console.log("我被click事件绑定了")
        // })
        //one 只能被调用一次
        // $("li").one("click",function () {
        //     console.log("one事件只能被执行一次")
        // })

        //live document绑定事件(只绑定一次) 存在多层冒泡缺点
        // 利用冒泡事件的方式,就叫做事件委托或代理
        // $("li").live("click",function () {
        //     console.log("live方式绑定")
        // })
        //delegate 事件代理
        // $("ul").delegate("li","click",function () {
        //     console.log("delegate事件代理绑定")
        // })

        // on 事件以上几种方式的集合
        $("ul").on("click","li",function () {
            console.log("on事件代理绑定")
        })
        //事件解除绑定
        $("ul").off()
        $("ul").unbind()

    });
</script>
</html>

事件其他用法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件其他用法</title>
</head>
<body>
    <button>按钮</button>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript" src="../js/flexible.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //自定义事件
        // $("button").bind("muke",function () {
        //     console.log("触发自定义事件")
        // })
        // $("button").trigger("muke")

        //命名空间
        // $("button").bind("click",function () {
        //     console.log("我是普通的点击事件")
        // })
        // $("button").bind("click.muke",function () {
        //     console.log("我是第二个普通事件")
        // })
        // $("button").unbind(".muke")

        //绑定多个事件
        $("button").bind("click",function () {
            console.log("111")
        }).bind("touchstart",function () {
           console.log("222")
        })
    })
</script>
</html>

Zepto动画

因为zepto.min是轻量级的,只保留核心功能,所以动画需要引入相关的js代码,可自行到git下载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Zepto动画</title>
</head>
<body>
    <div>123</div>
    <button>按钮</button>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript" src="../js/fx.js"></script>
<script type="text/javascript" src="../js/fx_methods.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("div").css({"fontSize":"30px","color":"red"})
        $("button").bind("click",function () {
            //$("div").toggle("slow") //切换元素的显示和隐藏
            //$("div").hide(3000)  隐藏
            //$("div").hide("slow")
            //$("div").show("slow")
            //$("div").fadeIn("slow")
            //$("div").fadeOut("slow")
            //$("div").fadeToggle("slow") //切换元素的淡入和淡出
            //$("div").fadeToggle("slow")
            $("div").fadeTo(3000,0.3)
        })
    })
</script>
</html>

自定义animate动画函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>zepto动画函数</title>
    <style type="text/css">
        div{
            position: absolute;
            width: 200px;
            height: 200px;
            background-color: #f27c01;
            text-align: center;
            line-height: 200px;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div>我是方块</div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript" src="../js/fx.js"></script>
<script type="text/javascript">
    // animate 动画函数
    $(document).ready(function () {
        $("div").click(function () {
            // $("div").animate({"left":"500px"},3000,function () {
            //     alert("动画执行完毕")
            // })

            // $("div").animate({"left":"500px"},3000,function () {
            //     this.animate({"height":"500px"},3000,function () {
            //         alert("动画已执行")
            //     });
            // });
            $("div").animate({"left":"500px","height":"500px"},3000,function () {
                alert("执行完毕")
            })
        })
    })
</script>
</html>

移动端事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>触屏事件</title>
    <style type="text/css">
        div{
            width: 250px;
            height: 250px;
            line-height: 250px;
            background-color: #f27c01;
            text-align: center;
        }
    </style>
</head>
<body>
    <div>屏幕</div>
</body>
<script type="text/javascript" src="../js/flexible.js"></script>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript" src="../js/touch.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("div").bind("touchmove",function (e) {
            e.preventDefault()
        })

        function listen_to(el) {
            $(el).tap(function () {
                console.log("| tap")
            }).doubleTap(function () {
                console.log("double tap")
            }).swipe(function () {
                console.log("| swipe")
            }).swipeLeft(function () {
                console.log("swipe left")
            }).swipeUp(function () {
                console.log("swipe up")
            }).swipeDown(function () {
                console.log("swipe down")
            })
        }
        listen_to("div")
    })
</script>
</html>

自定义Zepto插件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>我是插件</div>
</body>
<script type="text/javascript" src="../js/zepto.min.js"></script>
<script type="text/javascript">
    ;(function ($) {
        $.fn.color = function(option){
            var options = $.extend({
                col:"blue",
                fz:"20px"
            },option);

            this.css("color",options.col);
            this.css("fontSize",options.fz);

            return this
        }
    })(Zepto);
    $('div').color()
</script>
</html>

 将以上zepto相关demo代码过一遍,基本就算入门了。

posted @ 2022-07-27 17:22  一剑天门  阅读(3155)  评论(0编辑  收藏  举报