jQuery排序和动画

2021-01-02  本文已影响0人  amanohina

jQuery排序

eq()方法

index()方法

<script>
        // 选择所有的 p 标签元素
        var $ps = $("p");
        // index() 方法获取下标时,排序跟新生成的 jQuery 对象无关
        // 它依赖于自身元素在父级中同级元素之间的位置
        // 添加点击事件
        $ps.click(function () {
            // 点击输出自己的 index() 的值
            console.log($(this).index())
        })
        
    </script>

排他思想,简易tab栏

案例:

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .tab {
            width: 310px;
            height: 190px;
            border-top: 2px solid #206f96;
            margin: 100px;
            float: left;
        }

        .tab .title {
            width: 309px;
            height: 30px;
            border-left: 1px solid #cfcfcf;
            overflow: hidden;
        }

        .tab .title span {
            float: left;
            width: 102px;
            height: 29px;
            border-right: 1px solid #cfcfcf;
            border-bottom: 1px solid #cfcfcf;
            background-color: #f5f5f5;
            font: 14px/29px "SimSun";
            text-align: center;
        }

        .tab .title span.current {
            height: 30px;
            background-color: #fff;
        }

        .tab .title span a {
            color: #252525;
            text-decoration: none;
        }

        .tab .detail {
            height: 143px;
            padding: 17px 0 0 9px;
            font: 14px/27px "SimSun";
        }

        .tab .detail ul {
            display: none;
        }

        .tab .detail ul.current {
            display: block;
        }

        .tab .detail ul li a {
            color: #252525;
            text-decoration: none;
        }

        .tab .detail ul li.first {
            font-weight: bold;
        }
    </style>
</head>

<body>
    <div class="tab">
        <div class="title">
            <span class="current"><a href="#">新闻</a></span>
            <span><a href="#">图片</a></span>
            <span><a href="#">军事</a> <a href="#">航空</a></span>
        </div>
        <div class="detail">
            <ul class="current">
                <li class="first"><a href="#">习近平离京访问捷克并出席核安全峰会</a></li>
                <li><a href="#">习近平在捷克发文 热议 出访专题 这三年</a></li>
                <li><a href="#">李克强:亚洲国家较含蓄 更需开放交流 在博鳌</a></li>
                <li><a href="#">张德江会客 江泽民为《世界名曲45首》作序</a></li>
                <li><a href="#">酒店枕头下现近万现金 房客怒投诉:没换枕套</a></li>
            </ul>
            <ul>
                <li class="first"><a href="#">2习近平离京访问捷克并出席核安全峰会</a></li>
                <li><a href="#">习近平在捷克发文 热议 出访专题 这三年</a></li>
                <li><a href="#">李克强:亚洲国家较含蓄 更需开放交流 在博鳌</a></li>
                <li><a href="#">张德江会客 江泽民为《世界名曲45首》作序</a></li>
                <li><a href="#">酒店枕头下现近万现金 房客怒投诉:没换枕套</a></li>
            </ul>
            <ul>
                <li class="first"><a href="#">3习近平离京访问捷克并出席核安全峰会</a></li>
                <li><a href="#">习近平在捷克发文 热议 出访专题 这三年</a></li>
                <li><a href="#">李克强:亚洲国家较含蓄 更需开放交流 在博鳌</a></li>
                <li><a href="#">张德江会客 江泽民为《世界名曲45首》作序</a></li>
                <li><a href="#">酒店枕头下现近万现金 房客怒投诉:没换枕套</a></li>
            </ul>
        </div>
    </div>

    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        // 获取所有的 span
        var $span = $(".tab .title span");
        // 添加鼠标移上事件
        $span.mouseenter(function () {
            // 利用变量存储 this 的下标
            var idx = $(this).index();
            // 自己级别的排他
            $(this).addClass("current").siblings().removeClass("current");
            // 对应级别的排他
            $(".tab .detail ul").eq(idx).addClass("current").siblings().removeClass("current");
        })
    </script>
</body>

</html>

1.使用选择器选中所有的span标签。2.给所有的span标签添加mouseenter鼠标移上事件。3.记录index()方法得到的下标,对应this的下标。4.使用addClass与removeClass切换选中类名。5.对应的ul下标与this一致,使用eq(index)进行选中,同理切换选中类名

<script>
        // 获取所有的 span
        var $span = $(".tab .title span");
        // 添加鼠标移上事件
        $span.mouseenter(function () {
            // 利用变量存储 this 的下标
            var idx = $(this).index();
            console.log(idx);
      // 自己级别的排他
      // 查找所有对应 ul 时候,不要单独选择所有 ul,要通过当前的 this 的节点关系查找
      // 链式调用方式,找到自己父级中的兄弟中的所有子级 ul
      $(this).addClass("current")
      .siblings().removeClass("current")
      .parent().siblings().children().eq(idx).addClass("current")
      .siblings().removeClass("current");
            
        })
    </script>

each()遍历

优点1:

<body>
    <div class="box">
        <p></p>
        <p></p>
        <p></p>
        <p></p>
    </div>
    <div class="box">
        <p></p>
        <p></p>
        <p></p>
        <p></p>
    </div>
    <div class="box">
        <p></p>
        <p></p>
        <p></p>
        <p></p>
    </div>
    <div class="box">
        <p></p>
        <p></p>
        <p></p>
        <p></p>
    </div>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
        // 选择所有的 box 元素
        var $box = $(".box");
        // 给每个 box 内部的第二个 p 添加红色
        // $box.children().eq(1).css("background","red");
        //  each() 遍历
        // 将 jQuery 对象中的每一项单独拿出来进行操作
        $box.each(function () {
            // this 关键字,指向的是每一次遍历的元素对象
            // 就可以针对每一个元素进行单独操作
            $(this).children().eq(1).css("background","red");
        });
    </script>
</body>

优点2:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
    table {
      border-collapse: collapse;
    }
        td {
      width: 100px;
      height: 40px;
    }
    </style>
</head>
<body>
    <!-- 七行七列的table表单 -->
        <table></table>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script>
    // 选中偶数的列,变色
    // 但是列数如果是奇数的话就会出现棋盘类分布的问题
    // $("td:even").css("background","skyblue")

    // 可以将每一行作为单独操作单位,让每一行中的列进行隔列变色
    // 我们一提到对某个元素内部或内部的子元素进行一些操作,首先想到 each 方法
    // var $tr = $("tr");
    // $tr.each(function () {
    //   // 让子级所有的列隔列变色
    //   $(this).children(":odd").css("background","skyblue")
    // })

    // 方法2
    $("td").each(function () {
      // 可以判断 当前这个 td 在父级中所处的位置
      // index() 
      if ($(this).index() % 2 === 0) {
        $(this).css("background","skyblue")
      }
    })
    </script>
</body>
</html>

jQuery的入口函数

<script> 
        // onload 事件在加载时,指的是页面中多有的资源【DOM树、音频、视频、图片等】加载完毕后,才能触发
        // 一个页面中只能出现一次
        window.onload = function () {
            console.log(1);
            var btn = document.getElementsByTagName("input")[0];
            console.log(btn);
        };

        // jQuery 中的入口函数
        // 仅仅需要等待页面中的 DOM 树加载完毕就可以执行了
        $(document).ready(function () {
            console.log(2);
            var btn = document.getElementsByTagName("input")[0];
            console.log(btn);
        })

        // 简化
        // 在一个页面中,可以书写多个 jQuery 的入口函数,执行顺序按照前后加载顺序执行
        $(function () {
            console.log(3);
            var btn = document.getElementsByTagName("input")[0];
            console.log(btn);
        })
        // $(function () {

        // })
    </script>
</head>

<body>
    <input type="button" value="按钮">
</body>

jQuery切换效果方法

hide()和show()方法

参数

 // 添加点击事件,让图片实现显示和隐藏
        $btn1.click(function () {
            // $pic.hide("slow");
            $pic.hide(1000);
        })
        $btn2.click(function () {
            // $pic.show("normal");
            $pic.show("fast");
        })
        $btn3.click(function () {
            $pic.toggle("fast");
        })

slideDown()和slideUp()方法

参数

  // 添加点击事件,让图片实现滑动显示和隐藏
        $btn1.click(function () {
          $pic.slideUp(1000)
        })
        $btn2.click(function () {
          $pic.slideDown(1000)
        })
        $btn3.click(function () {
          $pic.slideToggle(1000)
        })

注意:

fadeIn()和fadeOut()方法

参数

 // 添加点击事件,让图片实现淡入显示和淡出隐藏
        $btn1.click(function () {
          $pic.fadeOut("slow")
        })
        $btn2.click(function () {
          $pic.fadeIn(1000)
        })
        $btn3.click(function () {
          $pic.fadeToggle()
        })
        $btn4.click(function () {
          $pic.fadeTo(500,0.5)
        })

animate()动画方法

<script>
        // 获取元素
        var $ps = $("p");
        // 习惯会将运动时间存储到一个变量中
        var during = 2000;
        // 添加点击事件,让元素运动
        $ps.click(function () {
            // 让自己的 left 的值变为 500
            // 使用 animate() 方法
            // 参数1: 运动的 css 的属性集,对象格式
            // 参数2: 运动时间,单词格式,数字格式
            // 参数3: 运动速度,可选 swing 和 linear
            // 参数4: 回调函数,在运动结束之后立即执行
            $(this).animate({"left": 500},during,"swing",function () {
                // 在运动结束后,让元素变红色
                $(this).css("background","red")
            })
            // 所有有数值的属性都可以运动
            $(this).animate({"width": 500})
            $(this).animate({"opacity": 0.5})
            // $(this).animate({"background": "#000"})
        })
    </script>

动画排队

①同一个元素对象身上,如果定义了多个动画,动画会排队等待执行。
②如果是不同的元素对象都有动画,不会出现排队机制。
③如果是的其他非运动的代码,也不会等待运动完成。
④之前学习的自带动画的显示隐藏方法,如果设置给同一个元素,也有动画排队。

动画延迟

        // 延迟
        $box1.animate({"left": 500},during);
        $box2.delay(2000).animate({"left": 500},during);

stop()方法

// 添加按钮点击事件
        // 清空动画,走到结尾
        $("#btn1").click(function () {
            $box1.stop(true,true)
        })

        // 清空动画,停在当前
        $("#btn2").click(function () {
            $box1.stop(true,false)
        })

        // 不清空后面的动画,当前运动立即走到结尾
        $("#btn3").click(function () {
            $box1.stop(false,true)
        })

        // 不清空后面的动画,当前运动立即停止在当前位置
        $("#btn4").click(function () {
            $box1.stop(false,false)
        })

        // 在实际工作中,一般要求会清空后面的动画,当前动画要停止在当前的位置
        // 更多时候使用 stop(true)

实际工作中,一般要求清空后面的排队,停止在当前位置,多使用 stop(true),第二个参数不设置默认为 false。

清空动画排队

动画排队问题:

方法1

// 将运动设置给事件,事件多次触发会积累动画出现动画排队
        // 清除动画排队方法1: 在每一次新的运动开始之前,去停止之前所有的动画排队
        $box1.mouseenter(function () {
            $(this).children().stop(true).slideUp(during)
        })
        $box1.mouseleave(function () {
            $(this).children().stop(true).slideDown(during)
        })

方法2

  // 清空动画排队方法2:使用函数节流方式
        $box1.mouseenter(function () {
            // 判断元素自己是否在运动中,如果是,那么直接返回不要往下添加新的运动
            if ($(this).children().is(":animated")) {
                return;
            }
            // 如果走到这里,说明元素没有在运动,就可以添加新运动
            $(this).children().stop(true).slideUp(during)
        })
        $box1.mouseleave(function () {
            // 判断元素自己是否在运动中,如果是,那么直接返回不要往下添加新的运动
            if ($(this).children().is(":animated")) {
                return;
            }
            $(this).children().stop(true).slideDown(during)
        })

综合实例

https://gitee.com/amanohina/home-week-1/blob/master/02-05-03-jQuery%E6%8E%92%E5%BA%8F%E5%92%8C%E5%8A%A8%E7%94%BB%E5%AE%9E%E4%BE%8B.rar

欢迎下载

上一篇 下一篇

猜你喜欢

热点阅读