大前端基础【2-5笔记】jQuery

内容输出:拉钩教育前端急训营

jQuery对象

1、jQuery对象

(1)通过$()方法获取到的对象是JQ对象。

(2)获取的是一组HTML元素,会进行批量操作。

(3)是一个类数组对象,内部包含所有的获取的原生js对象,以及大量的jQuery的方法和属性。

   let p = $("p");
   console.log(p.size()) //获取长度
   console.log(p.length) //获取长度
2、jQuery对象与原生js对象

(1)jQuery对象不能使用原生js对象的方法

(2)原生js对象也不能使用jQuery对象的方法

对象之间的转化

(1)原生对象转化为jQuery对象

let pList = document.getElementsByTagName("p");
$(pList[0]).css("color", "blue");

(2)jQuery对象转化为原生对象

let p = $("p");
p[0].innerHTML = "你好";
3、选择器
  $("p:first").css("background-color", "red"); // :first第一个
  $("p:last").css("background-color", "red");  // :last 最后一个
  $("p:eq(5)").css("background-color", "red"); // :eq:下标计算
  $("p:gt(4)").css("background-color", "red"); // :gt 大于下标为4的被选中
  $("p:lt(4)").css("background-color", "red"); // :lt 小于下标为4的被选中
  $("p:odd").css("background-color", "red"); //偶数
  $("p:even").css("background-color", "red"); //基数
  $("p:not(:even)").css("background-color", "red"); // not,不选择什么样的数据
  $("p").first().css("background-color", "red"); //删选方法

jQuery排序和动画

1、eq()方法

  • jQuery中获得的对象,内部包含被选择的一组原生js对象,在jQuery对象中会进行一个大的排序,这个排序和原来的HTML结构没有关系。
  • eq()方法在jQuery对象中通过下标获取某个对象,下标是jQuery对象中的大的排序的下标。

2、index()方法

index()方法获取下标时,排序跟新生成的jQuery对象无关。它依赖于自身元素在父级中同级元素之间的位置

3、排他思想

在一些事件中,希望自己是特殊的,而它的兄弟级是默认的

4、入口函数

原生的window.onload()在加载的过程时,页面中的资源【DOM树、音频、视频、图片】等加载完毕以后,才能触发window.onload(),并且一个页面只允许出现一次,多次出现,最后一次出现的会覆盖以前的;

jQuery的入口函数,则是加载完DOM树以后就开始触发,并且在一个页面中可以有多个jQuery的入口函数,执行顺序按照前后加载顺序进行,写法有以下两种:

//方式1
  $(document).ready(function(){
    console.log(1);
  })
  
//方式2
 $(function(){
    console.log(123);
  })

5、show( )、hide( )

不带参数证明是直接隐藏显示,带参数,如果是数字,则证明是整个动画时间(毫秒),过度时间内,伴随着宽度、高度和透明度的变化

fast、slow、normal

  $(function(){ 
    let img = $("#img");
    let hide = $("#hide");
    let show = $("#show");
    let toggle = $("#toggle");

    //带参数证明有动画效果
    hide.click(function(){
      // img.hide();
      // img.hide(1000);
      img.hide("fast");
    })

    show.click(function(){
      img.show("slow");
    })

    toggle.click(function(){
      img.toggle("normal");
    })

6、slideDown()、slideUp()滑动隐藏

不带参数证明是直接隐藏显示(默认400ms),带参数,如果是数字,则证明是整个动画时间(毫秒),过度时间内,伴随着高度的变化,fast、slow、normal

动画效果:高度属性在0和设置值之间进行变化,没有透明度动画

不设置宽高则没有滑动效果

   hide.click(function(){
      // img.hide();
      // img.hide(1000);
      img.slideUp(1000);//时间、毫秒
      img.slideUp("fast");
    })

    show.click(function(){
      img.slideDown("slow");
    })

    toggle.click(function(){
      img.slideToggle("normal");
    })

7、fadeIn()、fadeOut()

透明度的转化,与宽高没有关系,不带参数证明是直接隐藏显示(默认400ms),带参数,如果是数字,则证明是整个动画时间(毫秒),过度时间内,伴随着透明度的变化,fast、slow、normal

fadeTo(500,0.5);透明度变为0.5

8、animate()

执行CSS属性集的自定义动画

  • 第一个参数:对象格式,运动的最终css属性集
  • 第二个参数:运动时间,单词格式(normal,slow,fast),数字格式(毫秒)
  • 第三个参数:运动速度,两个值可选swing、linear
  • 第四个参数:回调函数,在运动结束后立即执行的函数
  let $ps = $("p");
  $ps.click(function(){


   // 默认400ms到达目的地
    $(this).animate({"margin-left": "200px"});

    //添加时间,默认1000ms运动时间到达目的地
    $(this).animate({"margin-left": "200px"}, 1000);

    //添加运动速度
    $(this).animate({"margin-left": "200px"}, 1000, "swing");

    //添加回调函数
    $(this).animate({"margin-left": "200px"}, 1000, "swing", function(){
      console.log("动画执行结束。。。")
    });

9、动画排队

1、一个元素身上,如果定义了多个动画,动画会排队等待执行。

2、如果是不同的元素对象都有动画,不会出现排队机制。

3、如果是其他非运行的代码,也不回等待运动完成后执行,会直接执行。

4、动画的显示隐藏效果,如果设置给同一个元素,也会出现动画排队的效果。

动画可以链式调用。

10、动画延迟delay()

delay()设置在某个运动方法之前,标识后面的运动要在规定的时间之后执行,有延迟运动的效果,参数是时间,单位是毫秒。

运动方法都有延时效果

$(this).delay(3000).animate({"margin-left": "200px"}, 1000, "swing", function(){
   console.log("动画执行结束。。。")
});

11、stop()停止动画

stop(boolean1, boolean2)

boolean1:默认false, 是否清空后面的动画,true:清空后边动画,false:继续执行后边的动画。

boolean2:默认false,当前运行是否立即走到结尾,true:立即走到结尾;false:停在当前。

实际工作中,一般要求清空后边的动画,当前动画停止到当前为位置。 stop(true);

12、清空动画排队

方法1:使用stop方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .div1{
      width: 200px;
      height: 200px;
      border: 20px solid gray;
      background-image: url("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2853553659,1775735885&fm=26&gp=0.jpg");
    }
    .div2{
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.4);
    }
    img{
      display: block;
      width: 200px;
      height: 200px;
    }
  </style>
</head>
<body>
  <div class="div1">
    <div class="div2">
    </div>
  </div>
</body>
<script src="./js/jquery-1.12.4.js"></script>
<script>
  let div = $(".div2");

  //方法1
  div.mouseenter(function(){
    $(this).children().stop().slideUp(1000);
  });
  div.mouseleave(function(){
    $(this).children().stop().slideDown(1000);
  });

  //方法2
 //使用函数节流
   div.mouseenter(function(){
     //
     if($(this).children().is(":animated")){
        return;
     }
     $(this).children().slideUp(1000);
   });
  div.mouseleave(function(){
    if($(this).children().is(":animated")){
        return;
     }
     $(this).children().slideDown(1000);
  });
</script>
</html>

jQuery节点操作和元素尺寸

1、操作元素尺寸

操作和获取的大小仅仅是内容部分,

  let div =  $("div");
  //获取宽度
  console.log(div.width()); // 200 数字类型

  //设置宽度
  div.width(500);

操作和获取的大小是内容部分+padding::inerHeight,innerWidth

  console.log(div.innerWidth()); // 300 数字类型 包含padding
  //设置宽度,多出的部分直接给宽width
  div.innerWidth(400);

操作和获取的大小是内容部分+padding+border:outerHeight,outerWidth

设置的时候,添加或减少的部分直接设置给width

2、删除、清空元素

1、删除元素:jQuery对象.remove( )

2、清空元素

jQuery对象.empty( ):推荐使用,清空内部所有元素及元素相关的事件

jQuery对象.html( ’ ’ ):仅仅清空内部元素

3、克隆元素

语法:jQuery对象.clone(布尔值);返回克隆好的元素。

参数:默认是false,表示仅仅克隆内容,true,克隆内容和事件。

4、操作元素的尺寸和位置

获取内容区域的宽度:jQuery对象.width( )

获取内容区域+padding区域的大小: jQuery对象.innerWidth( )

获取border以及区域的大小:jQuery对象.outerWidth( )

注意: 我们增加或减少的区域都会设置给:width,不会改变border和padding的值

offset():获取距离文档的位置,与定位和父级没有关系。top\left

position():获得的是元素距离上级定位参考元素的位置 top\left

5、操作卷去的页面间距

获取:jQuery对象.scrollTop( ) ,返回数字

设置:jQuery对象.scrollTop( )

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            height: 2000px;
            width: 200px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div></div>
    <button>返回顶部</button>
</body>
<script src="./js/jquery-3.6.0.min.js"></script>
<script>
    //获取滑动距离
    $(document).scroll(function(){
      console.log($(this).scrollTop());
    })
    
    //一键返回顶部
    $("button").click(function(){
        $("html,body").animate({"scrollTop":0},500)
    })
</script>
</html>

jQuery中的事件操作

1、on方法注册事件

注册简单事件语法:jQuery对象.on(‘事件名’,事件处理程序)。

on()方法封装的底层实际是addEventListener()

事件名相同的时候不会进行覆盖操作,而是依次执行。

2、on方法实现事件委托

原生方法实现事件委托

let div = document.getElementsByTagName('div')[0]
div.onclick = function (e) {
	e.target.style.background = 'pink'
}

使用jQuery对象实现事件委托:

jQuery对象.on(事件名, '选择器', 事件处理程序名称)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</body>
<script src="./js/jquery-3.6.0.min.js"></script>
<script>
    let ul = $("ul");
    ul.on("click", 'li', function() {
        alert($(this).text())
    })
</script>

</html>

3、off方法移除事件

1、解绑简单事件

jQuery对象.off(事件名, 事件处理程序名称)

2、解绑事件委托注册的事件

jQuery对象.off(事件名, '选择器', 事件处理程序名称)

4、trigger触发事件

jQuery对象.trigger('事件名')

5、事件对象

事件处理程序的第一个形参e

事件对象.keyCode 返回键码数字

事件对象.altKey/shiftKey/ctrlKey 返回的是布尔值。检测是否按下(true)

事件对象.target 最初触发事件的DOM元素

事件对象.currentTarget 在事件冒泡阶段中的当前的DOM元素

事件对象.preventDefault() 阻止默认行为(return false)

事件对象.stopPropagation() 阻止事件冒泡

6、多库共存

同时引入多个库,其他库中也存在$标识符

解决办法1:使用jQuery标识符进行调用

解决办法2:释放 标 识 符 , ‘ l e t m y 标识符,`let my letmy = jQuery.noConflict( )`

7、推荐jQuery插件库

http://www.htmleaf.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值