jQuery 的方法

一、序与迭代

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> 
  • show()显示、hide()隐藏、toggle()切换
    $("div").show(); //让一个本身是display:none;元素显示
    $("div").hide(); //隐藏元素display:none;
    $("div").toggle(); //切换显示状态。自行带有判断,如果可见,就隐藏;否则显示。

  • 如果show()、hide()、toggle()里面有数值,将变为动画:
    $("div").show(1000);
    此时display:none;的元素,将从左上角徐徐展开。动画机理:
    这个display:none;的元素会变为显示的,然后瞬间将宽度、高度、opacity设为0,然后徐徐展开。

  • 可以加回调函数:
    $("div").toggle(1000,function(){
    alert("偷狗完毕!");
    });

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

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

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


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

slide
slide
  • slideDown : 下滑展开
  • slideUp:上滑收回
  • slideToggle : 滑动切换
    $("div").slideDown();
    slideDown() 的起点一定是 display:none 换句话说,只有display:none的元素,才能够调用slideDown()
    动画机理:
    一个display:none的元素,瞬间显示,瞬间高度变为0,然后jQuery自己捕捉原有的height设置为动画的终点。
    等价于4条语句:
    $("div").show(); //瞬间显示
    var oldHeight = $("div").css("height"); //记忆住原有的高度
    $("div").css("height",0); //瞬间变为0
    $("div").animate({"height" : oldHeight},1000); //动画!终点是oldHeight
    相反的,slideUp()的终点就是display:none;
    同样的,slideDown、slideUp、slideToggle里面可以写动画时间、回调函数。

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

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

fadeIn()、fadeOut()、fadeTo().gif
fade
  • fadeIn() 淡入
  • fadeOut() 淡出
  • fadeTo() 淡到那个数
  • fadeToggle() 淡出入切换

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

  • "swing" - 在开头/结尾移动慢,在中间移动快 ; swing 摇摆;改变;冲力;秋千
  • "linear" - 匀速移动
    应用举例:
<!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()

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()

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

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

  • delay()
    delay延迟,可以使用连续打点,必须放在运动语句之前。
    $("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(":animated")

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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 1.序列与迭代 eq()方法: eq()是用来精确选择某个序列中的某个元素,如下: 现在我们想选择...
    3c58eba4eb74阅读 393评论 0 0
  • 首先,首先一定要引入 。不引入一切效果都是空。 1:函数截流: 当前的动画效果完成之后再进行下一个动画。当前运动...
    King小志阅读 113评论 0 0
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 720评论 0 9
  • jQuery模块 选择器、DOM操作、事件、AJAX与动画 匿名函数自执行 作用:解决命名空间与变量污染的问题 总...
    青青玉立阅读 884评论 0 0
  • JQ操作DOM属性节点相关方法(包含类的操作) 属性节点就是指dom元素的属性 一般如果是标签自身自带的属性,我们...
    Lins7阅读 445评论 0 0