基础前端

jQuery 的方法

2019-03-04  本文已影响15人  CondorHero

一、序与迭代

1 、eq() 方法

        <div class="box2">
            <p class="teshu"></p>
            <p class="teshu">我想红!我想当明星!</p>
            <p></p>
            <p></p>
        </div>

$(".box2 p").eq(1)
$("p").eq(1)
$(".teshu").eq(1)
$(".box2 .teshu").eq(1)
$() 函数将返回一个对象队列,用 eq 来精确选择这个序列中的某个元素。eq 用法类似数组的下标。

同样的,lt、gt、odd、even、first、last都是这个机理。

2、 index() 方法

index
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div.cen {
            margin: 0 auto;
            height: 500px;
            width: 500px;
        }
        ul {
            list-style: none;
        }
        p {
            height: 50px;
            width: 50px;
            background-color: #5e5e5e;
            margin: 10px;
        }
        p,h3 {
            float: left;
        }
        h3 {
            height: 50px;
            width: 50px;
            background-color: #5e5e5e;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="cen">
        <div>
            <ul>
                <li>
                    <h3>h3</h3>
                    <p>0</p>
                    <p>1</p>
                    <p>2</p>
                </li>
            </ul>
        </div>
        <div>
            <ul>
                <li>
                    <p>1</p>
                    <p>3</p>
                    <p>4</p>
                </li>
            </ul>
        </div>
    </div>
    <script src="js/jquery-1.12.3.min.js"></script>
    <script>
        $("p").click(function(){
            alert($(this).index());
        });
    </script>
</body>
</html>

index 返回这个元素在亲兄弟中的排名,无视选择器选择标签的类型,只会从选择器选择的标签兄弟开始计数,拿到选择器选择标签的排名。重点在于计数的时候从选择标签的大哥开始,并不从本身开始。例子中。h3成功占位。
举一个应用实例选中 box1 中的 p 让 box2 的 p 发生改变

    $(".box1 p").click(function(){
        //有变化的是box2中对应的p
        $(".box2 p").eq($(this).index()).css("background-color","red");
});

最后强调一下,是 index() 方法,而不是属性!

3、 each() 方法

each() 表示遍历节点,也叫作迭代符合条件的节点。
代码:

    $("p").each(function(i){
        $(this).animate({"width":50 * i},1000);
    });

each 进行类似 for 循环的功能,遍历所有的 p,然后执行函数。默认传进来的参数 i 是从零开始计数的。$(this) 表示你现在正在遍历的 p。

4、 size() 方法和 length 属性

jQuery 对象中元素的个数。
前面 $() 的元素页面上一共有几个,length、size()返回它的个数。是同一个数值。

5、 get() 方法

get() 方法和 eq() 方法基本一致,都仰赖$()的序列。
eq() 返回的是 jQuery 对象,而 get() 返回的是原生JS对象。jQuery 对象后面要跟着 jQuery 方法,原生对象后面要跟着原生属性、方法:

    $("p").eq(2).html("哈哈哈哈哈哈");
等价于:
    $("p").get(2).innerHTML = "哈哈哈哈哈哈";
等价于:
    $("p").eq(2)[0].innerHTML = "哈哈哈哈哈哈";

二、动画相关方法

1、 内置show()、hide()、toggle()方法

内置show()、hide()、toggle()方法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>togou</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <input type="button" value="show"/>
    <input type="button" value="hide"/>
    <input type="button" value="toggle"/>
    <input type="button" value="show(1000)"/>
    <input type="button" value="hide(1000)"/>
    <input type="button" value="toggle(1000)"/>

    <div></div>

    <script type="text/javascript" src="jquery-1.12.3.min.js"></script>
    <script type="text/javascript">
        
        $("input:eq(0)").click(function(){
            $("div").show();        //让一个本身是display:none;元素显示
        });

        $("input:eq(1)").click(function(){
            $("div").hide();        //隐藏元素display:none;
        });

        $("input:eq(2)").click(function(){
            $("div").toggle();      //切换显示状态。
                                    //自行带有判断,如果可见,就隐藏;否则显示。
        });

        $("input:eq(3)").click(function(){
            $("div").show(1000);        //让一个本身是display:none;元素显示
        });

        $("input:eq(4)").click(function(){
            $("div").hide(1000);        //隐藏元素display:none;
        });

        $("input:eq(5)").click(function(){
            $("div").toggle(1000,function(){
                alert("偷狗完毕!");
            });     //切换显示状态,自行带有判断,如果可见,就隐藏;否则显示。。
                                    
        });
    </script>
</body>
</html> 

语法就是:
$("div").show([时间],[回调函数]);
[] 表示这个参数可选。

2、slideDown()、slideUp()、slideToggle()方法

把上面的方法更改成本次方法就变成如下效果。


slideDown()、slideUp()、slideToggle()方法.gif
slide slide

一个水平导航栏的显示隐藏实例

3、fadeIn()、fadeOut()、fadeTo()

fadeIn()、fadeOut()、fadeTo().gif fade

fadeIn() 的起点是display:none; 换句话说,只有display:none的元素,才能执行fadeIn()。 fadeOut() 起点display:block;
fadeTo 有四个参数,第一个参数是动画的时间,第二个参数是要变到的透明度,第四个参数是回调函数
$(selector).fadeTo(speed,opacity,easing,callback)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>slideIn</title>
    <style>
        div {
            height: 200px;
            width: 200px;
            background-color: #5c7bd4;
            border:2px solid red;
        }
    </style>
</head>
<body>
    <div></div>
    <script src="js/jquery-1.12.3.min.js"></script>
    <script>
        $("div").hide(1000,function(){
            $(this).show(1000,function(){
                $(this).slideUp(1000,function(){
                    $(this).slideDown(1000,function(){
                      //以下代码才是新学的
                        $(this).fadeOut(1000,function(){
                            $(this).fadeIn(1000,function(){
                                $(this).fadeTo(3000,0.5);
                            });
                        });
                    });
                });
            });
        });
    </script>
</html>

效果图:

fadeIn()、fadeOut()、fadeTo().gif
到此我们可以使用新学的 jQuery 来改写原生写法的轮播图。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery 改写轮播图</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .carousel {
            width: 560px;
            height: 300px;
            margin:100px auto;
            position: relative;
        }
        .carousel ul {
            list-style: none;
        }
        .carousel .imageslist ul li {
            position: absolute;
            top: 0;
            left: 0;
            display: none;
        }
        .carousel .imageslist ul li.cur {
            display: block;
        }
        .leftbtn {
            height: 55px;
            width: 55px;
            position: absolute;
            top: 50%;
            left: 20px;
            margin-top: -27.5px;
            background-image: url(images/slide-btnL.png);
            z-index: 99;
            cursor: pointer;
        }
        .rightbtn {
            height: 55px;
            width: 55px;
            position: absolute;
            top: 50%;
            right: 20px;
            margin-top: -27.5px;
            background-image: url(images/slide-btnR.png);
            z-index: 99;
            cursor: pointer;
        }
        .carousel .circles {
            width: 150px;
            height: 16px;
            position: absolute;
            bottom: 10px;
            right: 10px;
        }
        .carousel .circles ul li {
            float: left;
            height: 16px;
            width: 16px;
            border-radius: 50%;
            background-color: orange;
            cursor: pointer;
            margin-right: 12px;
        }
        .carousel .circles ul li.first {
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <div class="carousel" id="carousel">
        <div class="btns">
            <div class="leftbtn" id="leftbtn"></div>
            <div class="rightbtn" id="rightbtn"></div>
        </div>
        <div class="imageslist" id="imageslist">
            <ul>
                <li class='cur'><a href=""><img src="images/0.jpg" alt=""></a></li>
                <li><a href=""><img src="images/1.jpg" alt=""></a></li>
                <li><a href=""><img src="images/2.jpg" alt=""></a></li>
                <li><a href=""><img src="images/3.jpg" alt=""></a></li>
                <li><a href=""><img src="images/4.jpg" alt=""></a></li>
            </ul>
        </div>
        <div class="circles">
            <ul>
                <li class="first"></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>
    <script src="js/jquery-1.12.3.min.js"></script>
    <script>
        //jQuery变量,我们习惯以$开头
        var $lis = $("#imageslist ul li");
        var idx = 0;
        //右按钮添加事件监听
        $("#rightbtn").click(function(){
            //节流
            if($lis.eq(idx).is(":animated")){
                return;
            }
            //老图淡出
            $lis.eq(idx).fadeOut(1000);
            //信号量改变
            idx++;
            if(idx > $lis.length - 1){
                idx = 0;
            }
            //新图淡入
            $lis.eq(idx).fadeIn(1000);
        })

        //左按钮添加事件监听
        $("#leftbtn").click(function(){
            //节流
            if($lis.eq(idx).is(":animated")){
                return;
            }
            //老图淡出
            $lis.eq(idx).fadeOut(1000);
            //信号量改变
            idx--;
            if(idx < 0){
                idx = $lis.length - 1;
            }
            //新图淡入
            $lis.eq(idx).fadeIn(1000);
        })
    </script>
</body>
</html>

4、stop() 和 flish() delay() is(":animated")

stop() 停止当前的animate动画,但是不清除队列,立即执行后面的animate动画:
$("div").stop(); //等价于$(“div”).stop(false,false);
停止当前的animate动画,并且清除队列,盒子留在了此时的位置:
$("div").stop(true); //等价于$(“div”).stop(true,false);
瞬间完成当前的animate动画,并且清除队列:
$("div").stop(true,true);
瞬间完成当前的animate动画,但是不清楚队列,立即执行后面的动画:
$("div").stop(false,true);

公式:
stop(是否清除队列,是否瞬间完成当前动画)
如果没有写 true 或者 false,默认是 false

finish() 瞬间完成所有动画队列!
$("div").finish();

stop可以用来防止动画的积累:
//连续打点语法,先清除所有的动画队列,然后执行新的动画
$("div").stop(true).animate({"left":100},1000);

    $("div").delay(1000).animate({"left":500},1000);    
    $("div").delay(1000).slideUp();
    $("div").delay(1000).hide(1);   //必须写1,写1了就是运动

小窍门,让所有的img元素,都延迟不同的时间入场:

    $("img").each(function(i){
        //attr() 方法设置或返回被选元素的属性和值。
        $(this).delay(i * 1000).fadeIn(1000);
    });

is()方法表示身份探测,只返回true、false。
is表示“是不是”,而不是“是”is里面可以写筛选器:
判断点击的这个p是不是序号是奇数:
$(this).is("p:odd")
判断点击的这个p是不是序号小于3:
$(this).is("p:lt(3)")

还可以写
is(":animated")
判断这个元素是否在运动中。
is里面可以写筛选器:
判断点击的这个p是不是序号是奇数:
$(this).is("p:odd")
判断点击的这个p是不是序号小于3:
$(this).is("p:lt(3)")

还可以写
is(":animated")
判断这个元素是否在运动中。

stop 和 if return 进行节流时候的区别?
当动画接受命令,没设置节流,动画会进行积累。stop 用于暂停当前操作,立马进行下一步。立马相应用户的命令。if return 防止用户流氓操作。基本上 if return 用于轮播和导航 slidedown/slideup。其他的用stop。

上一篇下一篇

猜你喜欢

热点阅读