JQuery复习第二天

243 阅读2分钟

这是我参与8月更文挑战的第3天,活动详情查看:更文挑战

节点操作

this

this在js中表示触发事件的对象

在jquery中有三个是不需要加双引号的

$(this)
$(document)
$(window)
// 点击哪个p让哪个p背景色改变
$("p").click(function() {
$(this).css("background-color", "red");
})

parent()

parent(): 父节点 只会选中亲父亲不会选中爷爷或者曾爷爷

// 点击哪个P让它的父节点背景色改变
$("p").click(function() {
$(this).parent().css("background-color", "blue");
})

siblings()

siblings():  兄弟节点。

// 点击哪个p让它的兄弟背景色改变
$("p").click(function() {
$(this).siblings().css("background-color", "red");
})

children()

// 点击哪个div让它的儿子颜色改变
$("div").click(function() {
$(this).children().css("background-color", "red");
})

不常用的节点操作

next(): 选中下一个兄弟节点

nextAll(): 后面所有的兄弟

prev():  选中上一个兄弟

prevAll(): 前面所有的兄弟

parents(): 祖先节点,也可以传递参数指定父节点

find(): 会选中所有后代节点,可以传递参数指定节点

连续打点:

$("p").click(function() {
$(this).css("background-color", "red")
.siblings().css("background-color", "green")
.parent().css("background-color", "purple")
.siblings().css("background-color", "yellow");
})

序号的问题

eq(): 选中元素大队列的排名,与亲兄弟的排名没有直接关系。

eq(): 选中元素不同, 序号也是不相同的。

index()

index(): 表示亲兄弟的排名,无视亲兄弟的类型。只要是同一个父节点就是亲兄弟。

each()

each(): 表示“每一个”。 用于循环、遍历所匹配到的每一个元素。接受一个参数就是: 匿名函数

函数当中也有一个this, 表示遍历到的该对象。

each()的参数是一个函数, 函数中有一个参数i,表示遍历到该对象的序号。

animate()函数

概述

animate():接受两个参数

第一个参数是:json

第二个参数是:完成动画的时间, 单位是ms, 省略不写。

animate是基于终点的动画

DOM结构:

<p></p>
<p></p>
<p></p>
<p></p>

代码:

// 让所有p元素运动到500的位置
$("p").animate({"left": 500}, 2000);

结果:

图片1.png

能够参与动画的属性

所有数值型的属性都可以参与动画

width

height

border

不能参与动画的属性

background-color

background-position

Css3的一些复杂属性(transform)

border-radius 可以参与动画的

举例:

//  backgroundColor, backgroundPosition 是不能参与动画的
$("p").animate({
"width": 200,
"height": 200,
"border-radius": "50%",
"backgroundColor": "blue",
"left": 500
}, 2000);

图片2.png

动画的执行顺序

  • 同一元素的不同animate,是按照绑定顺序执行的。

  • 不同元素的animate的执行顺序 是同时执行

  • animate()和css()

css(): 瞬间完成

animate(): 需要花费时间。

举例:

// 让box运动完毕之后改变box的背景颜色
$("#box").animate({"left": 500}, 2000).css("background-color", "red");

回调函数

异步语句: 类似于animate这种需要花费时间的语句,如果后面还有其他js代码,这些代码会立即执行不会死等animate函数执行完毕之后再去执行。

异步语句都有一个回调函数,异步语句执行完毕之后要做的事要写在回调函数中。

比如: 做一个肉菜。 第一步要解冻肉。

把肉放在微波炉中进行解冻需要花费10min, 在这期间我们还可以洗菜,摘菜,烧水,等到微波炉叮一声之后(叮之后就是回调函数),将肉拿出,开始做肉菜,做肉菜就是要写在回调函数中。

animate()、show(1000)、hide(1000)、slideDown()、slideUp()、fadeIn()、fadeOut()这些都是异步语句

实际上animate({}, time,callBack)

    第一个参数: json

    time: 完成动画的事件

    callBack: 回调函数

举例:

// 让box运动完毕之后再改变颜色
$("#box").animate({"left": 500}, 2000, function() {
$(this).css("background-color", "red");
})

比如fadeIn也可以书写回调函数

举例:

$("#box1").fadeIn(2000, function() {
$(this).css("background-color", "red");
})

delay()

delay(): 表示延迟,只能书写在动画的前面。参数就是要延迟的时间。

animate(),show(1000),hide(1000),slideDown(),slideUp(),fadeIn(),fadeOut()

举例:

// 点级btn让box延迟2s再执行动画
$("#btn").click(function() {
    $("#box").delay(2000).animate({"left": 500}, 2000, function() {
    $(this).css("background-color", "blue");
    })
})

常用: 利用delay()可以控制元素的进场顺序

stop()

stop(): 表示让运动的元素立即停止动画。

接受两个参数,都是布尔值 默认值都是false

第一个参数:是否清空当前动画队列

第二个参数: 是否立即完成当前动画

stop(false,false)  等价方式 stop() 表示立即进入下一个动画,立即停止当前动画

stop(false, true)  表示立即进入下一个动画, 立即停止并完成当前动画

stop(true, true)   表示清空当前动画队列, 立即停止并完成当前动画

stop(true, false) 等价方式stop(true) 表示清空动画队列,立即停止当前动画

防止动画积累

一个元素身上可以存在多个动画事件, 尤其是在不经意间就会造成动画积累,此时我们就要防止(也叫防流氓)

比如:现在有一支队伍在阜阳,接到了命令,前往广州,在去广州的路上有又接到了命令,回阜阳。 此时这支队友有两个策略:

①:立即执行新的任务, 放弃原有任务

利用stop(true)可以实现

// 去广州
$("#btn2").click(function() {
$("#box").stop(true).animate({"left": 1000}, 2000);
})
// 回阜阳
$("#btn1").click(function() {
$("#box").stop(true).animate({"left": 50}, 2000);
})

②:只有当元素不运动的时候,才接受新的任务

is(): 表示元素是否具备某种状态

is(“:animated”) 表示当元素运动的时候返回true, 当元素不运动的时候返回false

呼吸轮播图

概述

轮播图:carousel

呼吸轮播变种布局重点:所有的图片摞一起。

jquery选择元素的能力非常好,但是我们习惯将用到的元素,提前保存到变量。通常我们使用id选中元素。一般我们以$box。

左右按钮防流氓的策略:当图片运动时,不进行任何操作。is()

小圆点的防流氓的策略:立即响应新事件。stop(true)