JQuery学习笔记二(节点操作,事件监听,动画相关方法)

目录

一. 节点操作

 2. $()可以将一个普通字符串转成一个JQuery对象

3. 创建节点

4. appendTo()

5. prepend()

6. prependTo()

7. after()

8. before()

9. insertBefore()

10.  wrap()

11. wrapAll()

12. replaceWith()

13. empty()

14. remove()

二. 事件监听

1. 通过事件名绑定事件

2. 通过on绑定事件

3. 通过off取消事件绑定

4. 值绑定一次事件one()

5. 移入移出事件

6. 获取对象事件源

二. animation方法

1.animate方法的基本使用

2. 动画运行完的回调函数

3.动画排队

3.1 同一个元素的不同动画会排队

3.1 不同元素的动画不会存在动画排队

三. 动画的相关方法

1.内置的show(),hide(),toggle()方法

 1.1 没有参数的情况

 1.2 如果有数值参数,将变为动画,第一个参数为运动速度或时间

 1.3 第二个参数为运动完成后的回调

2. slideDown(),slideUp(),slideToggle()

 2.1 不传参数的情况

2.2 第一个参数为运动速度或时间

 2.3 传入的第二个参数为回调函数

2.4 结合上面两种方法自动执行

3. fadeIn(),fadeOut(),fadeTo(),fadeToggle();

 3.1 不传参数淡入或淡出

3.2 第一个参数为速度或时间

3.3 第三个参数是回调函数

 4. stop()

4.1 不传入参数

4.2 stop(true)

4.3 stop(true,true)

4.4 stop(false,true)

4.5 stop()可以防止动画积累

5. finish()

6. delay()

7. is(":animted")


上篇JQuery学习笔记一(JQuery选择器.css样式操作,节点关系)

 

一. 节点操作

1. append()

在父元素后面添加子节点

语法:

父元素.append(子节点)

$('.box1').append(`<h2>我是二级标题</h2>`);

 2. $()可以将一个普通字符串转成一个JQuery对象

    let $span = $('<span>123</span>');
    // console.log($span);
    // 不能这么写 ,下面的写法是选择文档中的p标签了
    $('span')

3. 创建节点

$('<p></p>')

$()不仅仅能选择节点也能创建节点

4. appendTo()

将一个jQuery元素添加到另外一个元素中,和append()方法是相反的,被动形式,追加于

$('<p>好的</p>').append($('.box1'))

5. prepend()

在父元素的最前面插入节点

    $('.box1').prepend('<h1>h1标题</h1>')

6. prependTo()

prependTo()被动形式插入到父元素节点最前面

    $('<p>没问题</p>').prependTo($('.box1'))

7. after()

在选中的元素后面插入一个兄弟元素节点

所有div标签后面插入一个span兄弟元素

    $('div').after('<span>白日依山尽</span>')

8. before()

在选中的元素前面插入一个兄弟节点

    $('div').before('<span>吃了没</span>')

9. insertBefore()

不同于原生的方法,在兄弟节点前插入新的节点

    $('<p>马兰开花二十一</p>').insertBefore($('p')[2])

10.  wrap()

给选中的元素外边添加一个包裹元素

    $('p:first').wrap('<div class="wrap"></div>');

11. wrapAll()

给所有的元素添加一个包裹元素

    $('div').wrapAll('<div class="wrap"></div>');

12. replaceWith()

将选中的元素替换掉,元素节点替换

    $('p:first').replaceWith('<div class="wrap">123</div>');

13. empty()

清空元素中的内容

    $('.box1').empty()

 清空之后大盒子box1依旧存在

14. remove()

删除节点

清空box1中的所有节点(包括box1本身)

    $('.box1').remove()

 box1本身也被删除掉

 15. clone()

节点克隆,参数为布尔值

  • 如果不传参数,默认为false,表示不可克隆元素的事件
  • 如果传true,表示克隆元素的事件
$('div').clone();
$('div').clone(true);
// true表示要克隆div元素身上的事件 

原生JavaScript的克隆,使用cloneNode()

  • 如果不传参数,默认为false,表示不克隆元素的后代节点
  • 如果参数为true,表示不仅克隆当前的元素节点,还会将所有的后代节点克隆下来
  • 元素的克隆方法只会克隆节点,不会克隆事件

二. 事件监听

1. 通过事件名绑定事件

在JQuery里面,所有事件均变成回调函数,事件一律不加on

    $('.box1').click(function () {
        alert('你好');
    })

案例

    $('p').mouseenter(function(){
        $(this).css('background-color','#9CCC65');
    })

    // 鼠标离开
    $('p').mouseleave(function(){
        $(this).css('background-color','#4FC3F7');
    })

2. 通过on绑定事件

    //给box2绑定点击事件
   $('.box2').on('click',() => {
        alert('123');
    })

3. 通过off取消事件绑定

    //取消给box2的点击事件
    $('.box2').off('click');

4. 值绑定一次事件one()

    //点击div时只会打印一次1
    $('div').one('click',()=>{
        console.log(1);
    })

5. 移入移出事件

    $('.box1').hover(function(){
        // 鼠标移入触发
        console.log(1);
    },function(){
        // 鼠标移出触发
        console.log(2);
    })

6. 获取对象事件源

    $('.box2').on('click',(ev) => {
        alert('123');
        //获取当前点击的原生DOM元素
        console.log(ev.target)
    })

二. animation方法

1.animate方法的基本使用

该方法接收两个参数:

  • 第一个参数:终点JSON

  • 第二个参数: 动画运行的时间,毫秒

  • 第三个参数为动画运行完后的参数

    $('p:eq(5)').animate({'margin-left':200,'margin-top':300},2000);

2. 动画运行完的回调函数

第三个参数为动画运行完后的参数

背景颜色是不能在动画里渐变的,只有在回调里完成,如果想让颜色慢慢渐变需要使用css3技术.

  $('p:eq(5)').animate({'margin-left':200,'margin-top':300},2000,function() {
       // console.log(1);
       $(this).css('background-color','#8BC34A');
   });

3.动画排队

3.1 同一个元素的不同动画会排队

    $('p:first').animate({'width':500},1000,function() {
       $(this).css('background-color','pink');
   })
   $('p:first').animate({'height':300},1000)

jQuery的动画和我们封装的不一样,不是斜着走的,而是先向右运动,结束后在向下移动

因为jQuery默认有一个处理机制,叫做 动画排队

动画排队:

当一个元素接收到了两个animate命令后,后面的animate会排队

所以上面的动画,先竖着跑在横着跑,总动画时长为3000毫秒

如果想同时变化就写在一个animate里面

   $('p:first').animate({'width':500,'height':300},1000,function() {
       $(this).css('background-color','pink');
   })

3.1 不同元素的动画不会存在动画排队

这里的p选择的是多个元素,不排队同时运行动画

    $('p').animate({'width':500,'height':60},2000,function() {
        $(this).css('background-color','pink');
    })

三. 动画的相关方法

1.内置的show(),hide(),toggle()方法

方法 功能
show() 显示
hide() 隐藏
toogle() 切换

基本使用方法:

show([time[,callback]])

参数都是可选的>_<

 1.1 没有参数的情况

$('div').show();  // 让div元素显示
$('div').hide();  // 让div元素隐藏,添加display:none
$('div').toggle();// 切换显示状态,自行带有判断,如果显示,则隐藏,如果隐藏则显示
 

 1.2 如果有数值参数,将变为动画,第一个参数为运动速度或时间

速度单词,fast normal, slow ,参数为字符串,通常不建议使用,因为是JQuery内置的,我们不能准确的把握时间

如果传入的为时间,则单位为毫秒数

让元素在显示与影藏之间动画运动1s,还有透明度变换

$('div').show(1000);  // 从左上角徐徐展开
$('div').hide(1000);  // 徐徐缩小到左上角,运动完成添加display:none
$('div').toggle(1000);// 切换显示状态,自行带有判断,如果显示,则隐藏,如果隐藏则显示

 1.3 第二个参数为运动完成后的回调

$('input:eq(0)').click(function(){
    $('div').show(1000,function(){
        $(this).css('background','red');  // 动画运行完执行的回调函数
    });
})

案例:

   let is_click = true;
    $('.display').on('click',function () {
        if(is_click) {
            $('.box3').hide(1000);
        }else{
            $('.box3').show(1000);
        }
        is_click = !is_click;
    })

  • 如果不传时间参数

表示瞬间显示或隐藏,不会有过渡效果

  • 如果传时间参数

表示显示和隐藏之间会有时间过渡,在过渡的过程中,JQuery会有通过宽高以及透明度等让元素有过渡效果,当结束运动之后变为display:none或display:block;

  • 不但可以传数值,还可以传速度有关的单词

fast normal, slow

2. slideDown(),slideUp(),slideToggle()

 滑动,卷帘运动,这个动画改变的就只有元素的高度

使用方式:

slideDown([time[,callback]])

 2.1 不传参数的情况

 slideDown()方法的动画机理

一个display:none;的元素,瞬间显示,瞬间高度变为0,然后jQuery自己捕捉原有的height作为动画的重点.

最好不要用行内元素做动画

等价于:

$('div').show(); // 瞬间显示

let oldHeight = $('div').css('height'); // 记住原有高度

$('div').css('height':0); // 将高度设置为0

$('div').animate({'height':oldHeight},1000); // 执行高度从0到原有高度的动

$('div').slideDown();  // 下滑展开
$('div').slideUp();    // 上滑收回
$('div').slideToggle();// 滑动切换

2.2 第一个参数为运动速度或时间

速度单词,fast normal, slow ,参数为字符串

如果传入的为时间,则单位为毫秒

$('div').slideDown(1000);

 2.3 传入的第二个参数为回调函数

$('div').slideDown(function(){
    $(this).css('background','red')
});

2.4 结合上面两种方法自动执行

   $('div').show(1000,function(){
       $(this).slideUp(1000,function(){
           $(this).slideDown(1000,function(){
               $(this).hide(1000)
           })
       })
   })

3. fadeIn(),fadeOut(),fadeTo(),fadeToggle();

淡入淡出的一系列方法

如果元素有opacity属性,一定要理解,你所设置的opacity值为,淡入的终点值,如果你设置为0,那么元素将永远淡入不了;

fadeIn()动画机理:

一个display:none的元素,瞬间可见,然后透明度瞬间变为opacity:0,然后自己的opacity开始变换,如果自己没有设置opacity,就变为1

 3.1 不传参数淡入或淡出

$('div').fadeIn();      // 淡入
$('div').fadeOut();     // 淡出 
$('div').fadeTo();      // 淡入到哪个数字,不传参数没效果,最好是时间和最终的opacity值一样设置.
						// 这个比较特殊,如果起点至比较大,就是淡出,起点值小,就是淡入
$('div').fadeToggle();  // 淡入淡出切换

3.2 第一个参数为速度或时间

$('div').fadeIn(1000);      // 淡入过程1000完成
$('div').fadeOut(1000);     // 淡出 
$('div').fadeTo(1000);      // 第一参数为过渡时间,第二个但是才是淡入到哪个数字
$('div').fadeToggle(100);  // 淡入淡出切换

3.3 第三个参数是回调函数

$('div').fadeIn(1000,function(){
    
});  

fadeTo()方法比较特殊:

如果不传参数没有效果,最好是时间和透明度参数一起传入

  • 第一个参数表示动画的运行时间

  • 第二个参数表示的是透明度变化的终点值

        $('div').fadeTo(2000,0.8)

 在开发者工具中可以清楚的看见opacity值的变化....

 4. stop()

关于动画停止一共有四种,不同的参数情况不同

stop();
stop(true);
stop(true,true);
stop(false,true);

4.1 不传入参数

stop ()停止动画如果没有参数,则表示停止当前的animate动画,但是不清除动画队列,立即执行后面的animate动画

$('div').stop();

4.2 stop(true)

停止当前animate动画,并且清除动画队列,盒子此时留在停止动画时的位置

$('div').stop(true);

4.3 stop(true,true)

停止当前animate动画,盒子瞬间停在当前animate动画的终点位置,并且清除动画队列,

可以理解为瞬间执行完当前动画,并且清除动画队列

$('div').stop(true,true);

4.4 stop(false,true)

瞬间完成当前的animate动画,但是不会清除动画队列,并且执行后面的动画

$('div').stop(false,true);

Emmmmmm......看完这几个方法,你有没有疑惑,这啥都有了,为啥就是没有过stop(true,false)呢???

其实stop(true),就是stop(true,false);后面的false可以省略,现在就明白了吧,stop()就是stop(false,false);

一点点小小的总结 :

stop()  对应 stop(fasle,false);

stop(true) 对应 stop(true,false);

stop(true,true) 对应 stop(true,true);

stop(false,ture) 对应 stop(false,ture) ;

以上的四种方法都会清除当前的动画,stop方法接收两个参数:

  1. 第一个参数:是否清除动画队列,true,清除动画队列,false,不清除动画队列

  2. 第二个参数:停止当前animate动画,停止后动画的位置,true为瞬间结束动画,动画停止后位置为当前动画的终点,false,停止动画值,元素停留在停止动画的位置

案例

<style>
        * {
            margin:0;
            padding:0;
        }

        .box {
            position: absolute;
            left:50px;
            top:80px;
            width: 100px;
            height: 100px;
            /*display: none;*/
            /*opacity: 0;*/
            background-color: #FF5722;
        }

        button {
            width: 200px;
            height: 50px;
            background-color: #80CBC4;
            font-size:18px;
        }
    </style>


    <button>stop()</button>
    <button>stop(true)</button>
    <button>stop(true,true)</button>
    <button>stop(false,true)</button>
    <div class="box"></div>


    <script>
        $('div').animate({'left':700},1000);
        $('div').animate({'top':500},1000);
        $('div').animate({'left':50},1000);
        $('div').animate({'top':80},1000);
        $('button:eq(0)').click(function () {
           $('.box').stop();
        })
        $('button:eq(1)').click(function () {
            $('.box').stop(true);
        })
        $('button:eq(2)').click(function () {
            $('.box').stop(true,true);
        })
        $('button:eq(3)').click(function () {
            $('.box').stop(false,true);
        })
    </script>

下面分别展示了正常状态下的效果,stop()的效果,stop(true)的效果及stop(true,true)和stop(false,true)的效果.

一张动图可能不能完全的展示出所有效果,大家可以自己动手尝试一下,和前面的文字想结合还是很好理解的.

4.5 stop()可以防止动画积累

每次点击都会在动画队列里添加一个动画,动画会排队

        $('button:eq(0)').click(function(){
            $('div').animate({'left':700},1000);
        })
        $('button:eq(1)').click(function(){
            $('div').animate({'left':100},1000);
        })

 连续触发之后再不触发,动画依旧会运行(之前点击的动画会在动画队列中,会一直运动完所有的已点击动画)

就像定时器,设表先关

用动画先关闭前面的动画

可以连续打点的调用,先清除动画队列,再行新的动画

5. finish()

瞬间完成所有动画

        $('button:eq(2)').click(function(){
            $('div').finish();
        })

6. delay()

延迟,触发动画之后延迟多少时间再执行动画,必须放在运动语句之前

$('div').delay(1000).animate({'left':500},1000);
$('div').delay(1000).slideUp();

注意hide()不加参数,就不是动画,是瞬间完成的,加参数哪怕数字1也是动画

$('div').delay(1000).hide(3000);

7. is(":animted")

判断一个元素是否在运动中,可以防止动画积累

$('div').animate({'width':900},4000);
$('div').click(function(){
    alert($(this).is(':animated'))
});

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章