jQery基础参考pink老师ppt

概述

jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码, 做更多的事情。
 
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
 
学习jQuery本质: 就是学习调用这些函数(方法)

jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。

优点

轻量级。核心文件才几十kb,不会影响页面加载速度 
跨浏览器兼容。基本兼容了现在主流的浏览器 
链式编程、隐式迭代 
对事件、样式、动画支持,大大简化了DOM操作 
支持插件扩展开发。有着丰富的第三方的插件,例如: 树形菜单、日期控件、轮播图等
免费、开源   

jQuery 的入口函数

$(function () {
    
           
 ...  // 此处是页面 DOM 加载完成的入口 
  }) ; 

 
  --------------------------------------------------


  $(document).ready(function(){
    
        
  ...  //  此处是页面DOM加载完成的入口 
  });    
  1. 等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
  2. 相当于原生 js 中的 DOMContentLoaded。
  3. 不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。
  4. 更推荐使用第一种方式。

jQuery 的顶级对象$

1.$ 是 jQuery 的别称,在代码中可以使用 jQuery 代替 $,
但一般为了方便,通常都直接使用 $ 。
  
2.$ 是jQuery 的顶级对象, 相当于原生JavaScript中的 window。
把元素利用$包装成jQuery对象,就可以调用 jQuery 的方法。

jQuery 对象和 DOM 对象

注意:
只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JavaScirpt 方法

DOM 对象与 jQuery 对象之间是可以相互转换的。
因为原生js 比 jQuery 更大,原生的一些属性和方法 jQuery没有给我们封装. 要想使用这些属性和方法需要把 jQuery对象转换为DOM对象才能使用

  1. DOM 对象转换为 jQuery 对象: $(DOM对象)
$('div')   
  1. jQuery 对象转换为 DOM 对象(两种方式)
$('div') [index]       index 是索引号       

$('div') .get(index)    index 是索引号 
    <script>

        var div = document.querySelector('div');
         div.style.display='none';
         
         
        $(div).hide();
        
         $('div')[0].style.display='none';
         
         $('div').get(0).style.display='none';
       </script>

总结:实际开发比较常用的是把DOM对象转换为jQuery对象,这样能够调用功能更加强大的jQuery中的方法。

jQuery 基础选择器

原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。

$(“选择器”)   //  里面选择器直接写 CSS 选择器即可,但是要加引号 

在这里插入图片描述

jQuery 层级选择器

在这里插入图片描述

jQuery 设置样式

$('div').css('属性', '值')       

隐式迭代

遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。

简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作, 方便我们调用

jQuery 筛选选择器

在这里插入图片描述
在这里插入图片描述

排他思想

想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>排他思想</title>
    <script src="js/jquery.min.js"></script>
  </head>
  <body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <button>4</button>
    <script>
      $(function () {
    
    
        // 1. 隐式迭代 给所有的按钮都绑定了点击事件
        $("button").click(function () {
    
    
            // 2. 当前的元素变化背景颜色
          $(this).css("background", "pink").siblings().css("background", ""); //链式编程
           // 3. 其余的兄弟去掉背景颜色 隐式迭代
          // $(this).siblings().css('background','');
        });
      });
    </script>
  </body>
</html>

案例:淘宝服饰精品案例

① 核心原理:鼠标经过左侧盒子某个小li,就让内容区盒子相对应图片显示,其余的图片隐藏。
② 需要得到当前小li 的索引号,就可以显示对应索引号的图片
③ jQuery 得到当前元素索引号 $(this).index()
④ 中间对应的图片,可以通过 eq(index) 方法去选择
⑤ 显示元素 show() 隐藏元素 hide()

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
    
    
            margin: 0;
            padding: 0;
            font-size: 12px;
        }
        
        ul {
    
    
            list-style: none;
        }
        
        a {
    
    
            text-decoration: none;
        }
        
        .wrapper {
    
    
            width: 250px;
            height: 248px;
            margin: 100px auto 0;
            border: 1px solid pink;
            border-right: 0;
            overflow: hidden;
        }
        
        #left,
        #content {
    
    
            float: left;
        }
        
        #left li {
    
    
            background: url(images/lili.jpg) repeat-x;
        }
        
        #left li a {
    
    
            display: block;
            width: 48px;
            height: 27px;
            border-bottom: 1px solid pink;
            line-height: 27px;
            text-align: center;
            color: black;
        }
        
        #left li a:hover {
    
    
            background-image: url(images/abg.gif);
        }
        
        #content {
    
    
            border-left: 1px solid pink;
            border-right: 1px solid pink;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function() {
    
    
            // 1. 鼠标经过左侧的小li 
            $("#left li").mouseover(function() {
    
    
                // 2. 得到当前小li 的索引号
                var index = $(this).index();
                console.log(index);
                // 3. 让我们右侧的盒子相应索引号的图片显示出来就好了
                // $("#content div").eq(index).show();
                // 4. 让其余的图片(就是其他的兄弟)隐藏起来
                // $("#content div").eq(index).siblings().hide();
                // 链式编程
                $("#content div").eq(index).show().siblings().hide();

            })
        })
    </script>
</head>

<body>
    <div class="wrapper">
        <ul id="left">
            <li><a href="#">女靴</a></li>
            <li><a href="#">雪地靴</a></li>
            <li><a href="#">冬裙</a></li>
            <li><a href="#">呢大衣</a></li>
            <li><a href="#">毛衣</a></li>
            <li><a href="#">棉服</a></li>
            <li><a href="#">女裤</a></li>
            <li><a href="#">羽绒服</a></li>
            <li><a href="#">牛仔裤</a></li>
        </ul>
        <div id="content">
            <div>
                <a href="#"><img src="images/女靴.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/雪地靴.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/冬裙.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/呢大衣.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/毛衣.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/棉服.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/女裤.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/羽绒服.jpg" width="200" height="250" /></a>
            </div>
            <div>
                <a href="#"><img src="images/牛仔裤.jpg" width="200" height="250" /></a>
            </div>

        </div>


    </div>
</body>

</html>

操作 css 方法

jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。

  1. 参数只写属性名,则是返回属性值
$(this).css(''color''); 
  1. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性名必须加引号,值如果是数字可以不用跟单位和引号
$(this).css(''color'', ''red''); 
$(this).css(''height'', ''100px''); 
也可以是
$(this).css(''height'', 100); 
  1. 参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开, 属性可以不用加引号,
$(this).css({
    
     "color":"white","font-size":"20px"}); 
也可以是

$(this).css({
    
     
color:"white",
font-size:20
}); 

设置类样式方法

作用等同于以前的 classList,可以操作类样式, 注意操作类里面的参数不要加点。

  1. 添加类
$(“div”).addClass(''current''); 
  1. 移除类
$(“div”).removeClass(''current''); 
  1. 切换类
$(“div”).toggleClass(''current''); 

案例:tab 栏切换

① 点击上部的li,当前li 添加current类,其余兄弟移除类。
② 点击的同时,得到当前li 的索引号
③ 让下部里面相应索引号的item显示,其余的item隐藏

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      * {
    
    
        margin: 0;
        padding: 0;
      }

      li {
    
    
        list-style-type: none;
      }

      .tab {
    
    
        width: 978px;
        margin: 100px auto;
      }

      .tab_list {
    
    
        height: 39px;
        border: 1px solid #ccc;
        background-color: #f1f1f1;
      }

      .tab_list li {
    
    
        float: left;
        height: 39px;
        line-height: 39px;
        padding: 0 20px;
        text-align: center;
        cursor: pointer;
      }

      .tab_list .current {
    
    
        background-color: #c81623;
        color: #fff;
      }

      .item_info {
    
    
        padding: 20px 0 0 20px;
      }

      .item {
    
    
        display: none;
      }
    </style>
    <script src="js/jquery.min.js"></script>
  </head>

  <body>
    <div class="tab">
      <div class="tab_list">
        <ul>
          <li class="current">商品介绍</li>
          <li>规格与包装</li>
          <li>售后保障</li>
          <li>商品评价(50000</li>
          <li>手机社区</li>
        </ul>
      </div>
      <div class="tab_con">
        <div class="item" style="display: block;">
          商品介绍模块内容
        </div>
        <div class="item">
          规格与包装模块内容
        </div>
        <div class="item">
          售后保障模块内容
        </div>
        <div class="item">
          商品评价(50000)模块内容
        </div>
        <div class="item">
          手机社区模块内容
        </div>
      </div>
    </div>
    <script>
      $(function () {
    
    
        $(".tab_list ul li").click(function () {
    
    
          // 1.点击上部的li,当前li 添加current类,其余兄弟移除类

          // 链式编程操作
          $(this).addClass("current").siblings().removeClass("current");
          // 2.点击的同时,得到当前li 的索引号
          var index = $(this).index();
          console.log(index);
          // 3.让下部里面相应索引号的item显示,其余的item隐藏
          $(".tab_con .item").eq(index).show().siblings().hide();

        ------------------------------------------------------------  
          $(this).addClass("current").siblings().removeClass("current");
          var index = $(this).index();
          $(".item")
            .eq(index)
            .css("display", "block")
            .siblings()
            .css("display", "none");
        });
      });
    </script>
  </body>
</html>

类操作与className区别

原生 JS 中 className 会覆盖元素原先里面的类名。
jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。
这个addClass相当于追加类名 不影响以前的类名

jQuery 效果

在这里插入图片描述

显示语法规范

show([speed,[easing],[fn]])  

显示参数
(1)参数都可以省略, 无动画直接显示。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

隐藏语法规范

hide([speed,[easing],[fn]]) 

** 隐藏参数**
(1)参数都可以省略, 无动画直接显示。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

切换语法规范

toggle([speed,[easing],[fn]]) 

切换参数
(1)参数都可以省略, 无动画直接显示。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。
建议:平时一般不带参数,直接显示隐藏即可。

下滑效果语法规范

slideDown([speed,[easing],[fn]]) 

下滑效果参数
(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

上滑效果语法规范

slideUp([speed,[easing],[fn]]) 

上滑效果参数
(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

滑动切换效果语法规范

slideToggle([speed,[easing],[fn]]) 

滑动切换效果参数

(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

事件切换

hover([over,]out) 

(1)over:鼠标移到元素上要触发的函数(相当于mouseenter)
(2)out:鼠标移出元素要触发的函数(相当于mouseleave)
(3)如果只写一个函数,则鼠标经过和离开都会触发它

         // 鼠标经过
             $(".nav>li").mouseover(function() {
    
    
                  $(this) jQuery 当前元素  this不要加引号
                  
                 $(this).children("ul").slideDown(200);
             });
             // 鼠标离开
             $(".nav>li").mouseout(function() {
    
    
                 $(this).children("ul").slideUp(200);
             });

可以简写成

// 1. 事件切换 hover 就是鼠标经过和离开的复合写法
             $(".nav>li").hover(function() {
    
    
                 $(this).children("ul").slideDown(200);
             }, function() {
    
    
                 $(this).children("ul").slideUp(200);
             });

在进一步简写成

// 2. 事件切换 hover  如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
            $(".nav>li").hover(function() {
    
    
                $(this).children("ul").slideToggle();
            });

动画队列及其停止排队方法

  1. 动画或效果队列
  2. 动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。
  3. 停止排队
stop() 

(1)stop() 方法用于停止动画或效果。

(2) 注意: stop() 写到动画或者效果的前面, 相当于停止结束上一次的动画。

淡入效果语法规范

fadeIn([speed,[easing],[fn]]) 

淡入效果参数

(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

淡出效果语法规范

fadeOut([speed,[easing],[fn]]) 

淡出效果参数

(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次

淡入淡出切换效果语法规范

fadeToggle([speed,[easing],[fn]]) 

淡入淡出切换效果参数

(1)参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

渐进方式调整到指定的不透明度

fadeTo([[speed],opacity,[easing],[fn]]) 

效果参数

(1)opacity 透明度必须写,取值 0~1 之间。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。必须写
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

高亮显示案例

当鼠标经过某个li时让他的兄弟的亮度变低,这样就显得当前的亮度变亮,鼠标离开时在恢复亮度

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        * {
    
    
            margin: 0;
            padding: 0;
        }
        
        ul {
    
    
            list-style: none;
        }
        
        body {
    
    
            background: #000;
        }
        
        .wrap {
    
    
            margin: 100px auto 0;
            width: 630px;
            height: 394px;
            padding: 10px 0 0 10px;
            background: #000;
            overflow: hidden;
            border: 1px solid #fff;
        }
        
        .wrap li {
    
    
            float: left;
            margin: 0 10px 10px 0;
        }
        
        .wrap img {
    
    
            display: block;
            border: 0;
        }
    </style>
    <script src="jquery.min.js"></script>
  <script>
        
        $(function() {
    
    
            //鼠标进入的时候,其他的li标签透明度:0.5
            $(".wrap li").hover(function() {
    
    
                $(this).siblings().stop().fadeTo(400, 0.5);
            }, function() {
    
    
                // 鼠标离开,其他li 透明度改为 1
                $(this).siblings().stop().fadeTo(400, 1);
            })

        });
    </script>
  
</head>

<body>
    <div class="wrap">
        <ul>
            <li>
                <a href="#"><img src="images/01.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/02.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/03.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/04.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/05.jpg" alt="" /></a>
            </li>
            <li>
                <a href="#"><img src="images/06.jpg" alt="" /></a>
            </li>
        </ul>
    </div>
</body>

</html>

自定义动画 animate

1. 语法

animate(params,[speed],[easing],[fn]) 

参数

(1)params: 想要更改的样式属性,以对象形式传递,必须写。 属性名可以不用带引号, 如果是复合属性则需要采 取驼峰命名法 borderLeft。其余参数都可以省略。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
    
    
            margin: 0;
            padding: 0;
        }
        
        li {
    
    
            list-style-type: none;
        }
        
        a {
    
    
            text-decoration: none;
            font-size: 14px;
        }
        
        .nav {
    
    
            margin: 100px;
        }
        
        .nav>li {
    
    
            position: relative;
            float: left;
            width: 80px;
            height: 41px;
            text-align: center;
        }
        
        .nav li a {
    
    
            display: block;
            width: 100%;
            height: 100%;
            line-height: 41px;
            color: #333;
        }
        
        .nav>li>a:hover {
    
    
            background-color: #eee;
        }
        
        .nav ul {
    
    
            display: none;
            position: absolute;
            top: 41px;
            left: 0;
            width: 100%;
            border-left: 1px solid #FECC5B;
            border-right: 1px solid #FECC5B;
        }
        
        .nav ul li {
    
    
            border-bottom: 1px solid #FECC5B;
        }
        
        .nav ul li a:hover {
    
    
            background-color: #FFF5DA;
        }
    </style>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <ul class="nav">
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
    </ul>
    <script>
        $(function () {
    
    
            // $('.nav li').mouseover(function () {
    
    
            //      $(this).children('ul').stop().slideDown();
            // })
            // $('.nav li').mouseout(function () {
    
    
            //     $(this).children('ul').stop().slideUp();
            // })
            //1. 事件切换 hover 就是鼠标经过和离开的复合写法
            // $('.nav li').hover(function(){
    
    
            //   $(this).children('ul').stop().slideDown();
            // },function(){
    
    
            //     $(this).children('ul').stop().slideUp();
            // })
            //2. 事件切换 hover  如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
            $('.nav li').hover(function(){
    
    
                $(this).children('ul').stop().slideToggle();
            })
        })
    </script>
</body>

</html>

案例:王者荣耀手风琴效果

① 鼠标经过某个小li 有两步操作:
② 当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
③ 其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>手风琴案例</title>

    <style type="text/css">
        * {
    
    
            margin: 0;
            padding: 0;
        }
        
        img {
    
    
            display: block;
        }
        
        ul {
    
    
            list-style: none;
        }
        
        .king {
    
    
            width: 852px;
            margin: 100px auto;
            background: url(images/bg.png) no-repeat;
            overflow: hidden;
            padding: 10px;
        }
        
        .king ul {
    
    
            overflow: hidden;
        }
        
        .king li {
    
    
            position: relative;
            float: left;
            width: 69px;
            height: 69px;
            margin-right: 10px;
        }
        
        .king li.current {
    
    
            width: 224px;
        }
        
        .king li.current .big {
    
    
            display: block;
        }
        
        .king li.current .small {
    
    
            display: none;
        }
        
        .big {
    
    
            width: 224px;
            display: none;
        }
        
        .small {
    
    
            position: absolute;
            top: 0;
            left: 0;
            width: 69px;
            height: 69px;
            border-radius: 5px;
        }
    </style>
     <script src="js/jquery.min.js"></script>
</head>

<body>
    <script src="js/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
    
    
            // 鼠标经过某个小li 有两步操作:
            $(".king li").mouseenter(function() {
    
    
                // 1.当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
                $(this).stop().animate({
    
    
                    width: 224
                }).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
                // 2.其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出
                $(this).siblings("li").stop().animate({
    
    
                    width: 69
                }).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();
            })



        });
    </script>
    <div class="king">
        <ul>
            <li class="current">
                <a href="#">
                    <img src="images/m1.jpg" alt="" class="small">
                    <img src="images/m.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/l1.jpg" alt="" class="small">
                    <img src="images/l.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/c1.jpg" alt="" class="small">
                    <img src="images/c.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/w1.jpg" alt="" class="small">
                    <img src="images/w.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/z1.jpg" alt="" class="small">
                    <img src="images/z.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/h1.jpg" alt="" class="small">
                    <img src="images/h.png" alt="" class="big">
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="images/t1.jpg" alt="" class="small">
                    <img src="images/t.png" alt="" class="big">
                </a>
            </li>
        </ul>

    </div>




</body>

</html>

设置或获取元素固有属性值 prop()

所谓元素固有属性就是元素本身自带的属性,比如 元素里面的 href ,比如 元素里面的 type。

  1. 获取属性语法
prop(''属性'') 
  1. 设置属性语法
prop(''属性'', ''属性值'') 

设置或获取元素自定义属性值 attr()

用户自己给元素添加的属性,我们称为自定义属性。 比如给 div 添加 index =“1”。

  1. 获取属性语法
attr(''属性'')      // 类似原生 getAttribute() 
  1. 设置属性语法
attr(''属性'', ''属性值'')   // 类似原生 setAttribute() 

数据缓存 data()

data() 方法可以在指定的元素上存取数据,并不会修改 DOM 元素结构。一旦页面刷新,之前存放的数据都将被移除。

附加数据语法

 data(''name'',''value'')   // 向被选元素附加数据   
  1. 获取数据语法
date(''name'')             //   向被选元素获取数据   

同时,还可以读取 HTML5 自定义属性 data-index ,得到的是数字型
注意如果是h5的自定义属性来取attr和data有区别,例如 data-index

attr("data-index")
data("index")
用data取不需要前面的data-

案例:购物车案例模块-全选

① 全选思路:里面3个小的复选框按钮(j-checkbox)选中状态(checked)跟着全选按钮(checkall)走。
② 因为checked 是复选框的固有属性,此时我们需要利用prop()方法获取和设置该属性。
③ 把全选按钮状态赋值给3小复选框就可以了。
④ 当我们每次点击小的复选框按钮,就来判断:
⑤ 如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。
⑥ :checked 选择器 :checked 查找被选中的表单元素。

 //如果全选按钮选中,则每一个按钮都被选中
    $('.checkall').change(function () {
    
    
         $('.j-checkbox,.checkall').prop('checked',$(this).prop('checked'));
    })
    $('.j-checkbox').click(function(){
    
    
        // 如果按钮选中的个数等于所有按钮的个数
        if($('.j-checkbox:checked').length==$('.j-checkbox').length){
    
    
            $('.checkall').prop('checked',true);
        }
        else{
    
    
            $('.checkall').prop('checked',false);
        }
    })

jQuery 内容文本值

主要针对元素的内容还有表单的值操作。

  1. 普通元素内容 html()( 相当于原生inner HTML)
html()             // 获取元素的内容 

html(''内容'')   // 设置元素的内容 
  1. 普通元素文本内容 text() (相当与原生 innerText)
text()                     // 获取元素的文本内容 

text(''文本内容'')   // 设置元素的文本内容 
  1. 表单的值 val()( 相当于原生value)
val()              // 获取表单的值 

val(''内容'')   // 设置表单的值 

案例:购物车案例模块-增减商品数量

① 核心思路:首先声明一个变量,当我们点击+号(increment),就让这个值++,然后赋值给文本框。
② 注意1: 只能增加本商品的数量, 就是当前+号的兄弟文本框(itxt)的值。
③ 修改表单的值是val() 方法
④ 注意2: 这个变量初始值应该是这个文本框的值,在这个值的基础上++。要获取表单的值
⑤ 减号(decrement)思路同理,但是如果文本框的值是1,就不能再减了

$('.increment').click(function(){
    
    
        //每次的初始值是当前页面的值而不是0
        var num=$(this).siblings('.itxt').val();
        num++;
        //更改表单的值
        $(this).siblings('.itxt').val(num);
        
        
    })
    $('.decrement').click(function(){
    
    
        var num=$(this).siblings('.itxt').val();
        num--;
        //减到0后就return结束
        if(num==0){
    
    
            return false;
        }
        $(this).siblings('.itxt').val(num);
    })

案例:购物车案例模块-修改商品小计

① 核心思路:每次点击+号或者-号,根据文本框的值 乘以 当前商品的价格 就是 商品的小计
② 注意1: 只能增加本商品的小计, 就是当前商品的小计模块(p-sum) ③ 修改普通元素的内容是text() 方法
④ 注意2: 当前商品的价格,要把¥符号去掉再相乘 截取字符串 substr(1) ⑤ parents(‘选择器’) 可以返回指定祖先元素
⑥ 最后计算的结果如果想要保留2位小数 通过 toFixed(2) 方法
⑦ 用户也可以直接修改表单里面的值,同样要计算小计。 用表单change事件
⑧ 用最新的表单内的值 乘以 单价即可 但是还是当前商品小计

$('.increment').click(function(){
    
    
        //每次的初始值是当前页面的值而不是0
        var num=$(this).siblings('.itxt').val();
        num++;
        //更改表单的值
        $(this).siblings('.itxt').val(num);
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
      
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
        
    })
    $('.decrement').click(function(){
    
    
        var num=$(this).siblings('.itxt').val();
        num--;
        //减到0后就return结束
        if(num==0){
    
    
            return false;
        }
        $(this).siblings('.itxt').val(num);
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
    })
    $('.itxt').change(function(){
    
    
        var num=$('.itxt').val();
        var price=$(this).parents('.p-num').siblings('.p-price').html();
        //去掉前面的¥符号
         price=price.substr(1);
        //  字符串和数值相乘隐式转换
        // toFixed(2)保留两位小数
         $(this).parents('.p-num').siblings('.p-sum').html("¥"+(price*num).toFixed(2));
    })

遍历元素

jQuery 隐式迭代是对同一类元素做了同样的操作。 如果想要给同一类元素做不同操作,就需要用到遍历。

语法1:

 $("div").each(function (index, domEle) {
    
     xxx; }
  1. each() 方法遍历匹配的每一个元素。主要用DOM处理。 each 每一个
  2. 里面的回调函数有2个参数: index 是每个元素的索引号; demEle 是每个DOM元素对象,不是jquery对象
  3. 所以要想使用jquery方法,需要给这个dom元素转换为jquery对象 $(domEle)

语法2:

$.each(object,function (index, element) {
    
     xxx; }
  1. $.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
  2. 里面的函数有2个参数: index 是每个元素的索引号; element 遍历内容

案例:购物车案例模块-计算总计和总额
① 核心思路:把所有文本框里面的值相加就是总计数量。总额同理
② 文本框里面的值不相同,如果想要相加需要用到each遍历。声明一个变量,相加即可
③ 点击+号-号,会改变总计和总额,如果用户修改了文本框里面的值同样会改变总计和总额
④ 因此可以封装一个函数求总计和总额的, 以上2个操作调用这个函数即可。
⑤ 注意1: 总计是文本框里面的值相加用 val() 总额是普通元素的内容用text()
⑥ 要注意普通元素里面的内容要去掉¥并且转换为数字型才能相加

function getsum(){
    
    
        var snum=0;
        var smoney=0;
        $('.itxt').each(function(i,ele){
    
    
            //ele是一个dom对象需要转化为jQuery对象
            var ele=$(ele);
            //如果选中才把数量加到总和里面
            if(ele.parents('.p-num').siblings('.p-checkbox').children('.j-checkbox').prop('checked')){
    
    
                snum+=parseInt(ele.val());
            }
         
        })
        console.log(snum);
        $('.amount-sum em').text(snum);
        console.log($('.p-sum').text());
        $('.p-sum').each(function(i,ele){
    
    
            var ele=$(ele);
            //如果选中才把价钱加到总和里面
            if(ele.siblings('.p-checkbox').children('.j-checkbox').prop('checked')){
    
    
                
                smoney+=parseFloat(ele.text().substr(1));
            }
        })
        $('.price-sum em').text(smoney.toFixed(2));
    }

创建元素
语法:

$(''<li></li>'');       

内部添加

element.append(''内容'')   

把内容放入匹配元素内部最后面,类似原生 appendChild

 element.prepend(''内容'')     

把内容放入匹配元素内部最前面。

外部添加

element.after(''内容'')        //  把内容放入目标元素后面 

element.before(''内容'')    //  把内容放入目标元素前面  

① 内部添加元素,生成之后,它们是父子关系。
② 外部添加元素,生成之后,他们是兄弟关系。

删除元素

element.remove()   //  删除匹配的元素(本身) 
element.empty()    //  删除匹配的元素集合中所有的子节点 
element.html('''')   //  清空匹配的元素内容 

① remove 删除元素本身。
② empt() 和 html(’’’’) 作用等价,都可以删除元素里面的内容,只不过 html 还可以设置内容。

案例:购物车案例模块-删除商品模块
① 核心思路:把商品remove() 删除元素即可
② 有三个地方需要删除:

  1. 商品后面的删除按钮
  2. 删除选中的商品
  3. 清理购物车
    ③ 商品后面的删除按钮: 一定是删除当前的商品,所以从 $(this) 出发
    ④ 删除选中的商品: 先判断小的复选框按钮是否选中状态,如果是选中,则删除对应的商品
    ⑤ 清理购物车: 则是把所有的商品全部删掉
// 6. 删除商品模块
    // (1) 商品后面的删除按钮
    $(".p-action a").click(function() {
    
    
        // 删除的是当前的商品 
        $(this).parents(".cart-item").remove();
        getSum();
    });
    // (2) 删除选中的商品
    $(".remove-batch").click(function() {
    
    
        // 删除的是小的复选框选中的商品
        $(".j-checkbox:checked").parents(".cart-item").remove();
        getSum();
    });
    // (3) 清空购物车 删除全部商品
    $(".clear-all").click(function() {
    
    
        $(".cart-item").remove();
        getSum();
    })

案例:购物车案例模块-选中商品添加背景
① 核心思路:选中的商品添加背景,不选中移除背景即可
② 全选按钮点击:如果全选是选中的,则所有的商品添加背景,否则移除背景
③ 小的复选框点击: 如果是选中状态,则当前商品添加背景,否则移除背景
④ 这个背景,可以通过类名修改,添加类和删除类

 //如果全选按钮选中,则每一个按钮都被选中
    $('.checkall').change(function () {
    
    
         $('.j-checkbox,.checkall').prop('checked',$(this).prop('checked'));
         if($(this).prop('checked')){
    
    
             $('.cart-item').addClass('check-cart-item');

         }
         else{
    
    
            $('.cart-item').removeClass('check-cart-item');
         }
    })
    $('.j-checkbox').click(function(){
    
    
        // 如果按钮选中的个数等于所有按钮的个数
        if($('.j-checkbox:checked').length==$('.j-checkbox').length){
    
    
            $('.checkall').prop('checked',true);
        }
        else{
    
    
            $('.checkall').prop('checked',false);
        }
        if($(this).prop('checked')){
    
    
            $(this).parents('.cart-item').addClass('check-cart-item');
        }
        else{
    
    
            $(this).parents('.cart-item').removeClass('check-cart-item');
        }
    })

jQuery 尺寸
在这里插入图片描述
位置主要有三个: offset()、position()、scrollTop()/scrollLeft()

  1. offset() 设置或获取元素偏移
    ① offset() 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系。
    ② 该方法有2个属性 left、top 。offset().top 用于获取距离文档顶部的距离,offset().left 用于获取距离文档左侧的距离。
    ③ 可以设置元素的偏移:offset({ top: 10, left: 30 });

  2. position() 获取元素偏移
    ① position() 方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为准。
    ② 该方法有2个属性 left、top。position().top 用于获取距离定位父级顶部的距离,position().left 用于获取距离定 位父级左侧的距离。
    ③ 该方法只能获取不能修改

  3. scrollTop()/scrollLeft() 设置或获取元素被卷去的头部和左侧
    ① scrollTop() 方法设置或返回被选元素被卷去的头部。
    ② 不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部

案例:带有动画的返回顶部

① 核心原理: 使用animate动画返回顶部。
② animate动画函数里面有个scrollTop 属性,可以设置位置
③ 但是是元素做动画,因此 $(“body,html”).animate({scrollTop: 0})

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
    
    
            height: 2000px;
        }
        
        .back {
    
    
            position: fixed;
            width: 50px;
            height: 50px;
            background-color: pink;
            right: 30px;
            bottom: 100px;
            display: none;
        }
        
        .container {
    
    
            width: 900px;
            height: 500px;
            background-color: skyblue;
            margin: 400px auto;
        }
    </style>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <div class="back">返回顶部</div>
    <div class="container">
    </div>
    <script>
        $(function (){
    
    
            $(window).scroll(function() {
    
    
                if($(this).scrollTop()>=($('.container').offset().top)){
    
    
                     $('.back').show();
                }
                else{
    
    
                    $('.back').hide();
                }
            })
            //不能是文档而是 html和body元素做动画
            $('.back').click(function(){
    
    
                 $('html, body').animate({
    
    
                     scrollTop : 0,
                
                })
            })
        })
    </script>
        
</body>

</html>

jQuery 事件注册

element.事件(function(){
    
    })

$(“div”).click(function(){
    
      事件处理程序 })  

其他事件和原生基本一致。
比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等

事件处理 on() 绑定事件
on() 方法在匹配元素上绑定一个或多个事件的事件处理函数

语法:

element.on(events,[selector],fn)     
  1. events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
  2. selector: 元素的子元素选择器 。
  3. fn:回调函数 即绑定在元素身上的侦听函数。

on() 方法优势1:
可以绑定多个事件,多个处理事件处理程序

 $(“div”).on({
    
       
 mouseover: function(){
    
    },    
 mouseout: function(){
    
    },   
 click: function(){
    
    }  
 }); 

如果事件处理程序相同

 $(“div”).on(“mouseover mouseout”, function() {
    
        $(this).toggleClass(“current”);   
 });  

on() 方法优势2:
可以事件委派操作 。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。

$('ul').on('click', 'li', function() {
    
         
alert('hello world!'); 
});   

在此之前有bind(), live() delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们

on() 方法优势3:
动态创建的元素,click() 没有办法绑定事件, on() 可以给动态生成的元素绑定事件

 $(“div").on("click",”p”, function(){
    
          
 alert("俺可以给动态生成的元素绑定事件") 
  });  
 $("div").append($("<p>我是动态创建的p</p>"));  

案例:发布微博案例
① 点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中。
② 点击的删除按钮,可以删除当前的微博留言。

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
    
    
            margin: 0;
            padding: 0
        }
        
        ul {
    
    
            list-style: none
        }
        
        .box {
    
    
            width: 600px;
            margin: 100px auto;
            border: 1px solid #000;
            padding: 20px;
        }
        
        textarea {
    
    
            width: 450px;
            height: 160px;
            outline: none;
            resize: none;
        }
        
        ul {
    
    
            width: 450px;
            padding-left: 80px;
        }
        
        ul li {
    
    
            line-height: 25px;
            border-bottom: 1px dashed #cccccc;
            display: none;
        }
        
        input {
    
    
            float: right;
        }
        
        ul li a {
    
    
            float: right;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function() {
    
    
            // 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中
            $(".btn").on("click", function() {
    
    
                var li = $("<li></li>");
                li.html($(".txt").val() + "<a href='javascript:;'> 删除</a>");
                $("ul").prepend(li);
                li.slideDown();
                $(".txt").val("");
            })

            // 2.点击的删除按钮,可以删除当前的微博留言li
            // $("ul a").click(function() {  // 此时的click不能给动态创建的a添加事件
            //     alert(11);
            // })
            // on可以给动态创建的元素绑定事件
            $("ul").on("click", "a", function() {
    
    
                $(this).parent().slideUp(function() {
    
    
                    $(this).remove();
                });
            })

        })
    </script>
</head>

<body>
    <div class="box" id="weibo">
        <span>微博发布</span>
        <textarea name="" class="txt" cols="30" rows="10"></textarea>
        <button class="btn">发布</button>
        <ul>
        </ul>
    </div>
</body>

</html>

off() 方法可以移除通过 on() 方法添加的事件处理程序。

$("p").off() // 解绑p元素所有事件处理程序 
 
$("p").off( "click")  // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名 
 
$("ul").off("click", "li");   // 解绑事件委托 

如果有的事件只想触发一次, 可以使用 one() 来绑定事件。

自动触发事件 trigger()
有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标 点击触发。

element.click()  // 第一种简写形式 

element.trigger("type") // 第二种自动触发模式 

$("p").on("click", function () {
    
       alert("hi~"); });  
 
$("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击 

element.triggerHandler(type)  // 第三种自动触发模式 
triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。 

事件被触发,就会有事件对象的产生。

element.on(events,[selector],function(event) {
    
    })  

阻止默认行为:event.preventDefault() 或者 return false
阻止冒泡: event.stopPropagation()

jQuery 对象拷贝
如果想要把某个对象拷贝(合并) 给另外一个对象使用,此时可以使用 $.extend() 方法

语法:

$.extend([deep], target, object1, [objectN]) 
  1. deep: 如果设为true 为深拷贝, 默认为false 浅拷贝
  2. target: 要拷贝的目标对象
  3. object1:待拷贝到第一个对象的对象。
  4. objectN:待拷贝到第N个对象的对象。
  5. 浅拷贝目标对象引用的被拷贝的对象地址,修改目标对象会影响被拷贝对象。
  6. 深拷贝,前面加true, 完全克隆,修改目标对象不会影响被拷贝对象

jQuery 多库共存
问题概述:

jQuery使用 作 为 标 示 符 , 随 着 j Q u e r y 的 流 行 , 其 他 j s 库 也 会 用 这 作为标示符,随着jQuery的流行,其他 js 库也会用这 jQuery,js作为标识符, 这样一起使用会引起冲突。
客观需求:

需要一个解决方案,让jQuery 和其他的js库不存在冲突,可以同时存在,这就叫做多库共存。

jQuery 解决方案:

  1. 把里面的 $ 符号 统一改为 jQuery。 比如 jQuery(’‘div’’)
  2. jQuery 变量规定新的名称:$.noConflict() var xx = $.noConflict();

jQuery 功能比较有限,想要更复杂的特效效果,可以借助于 jQuery 插件完成。
注意: 这些插件也是依赖于jQuery来完成的,所以必须要先引入jQuery文件,因此也称为 jQuery 插件。
jQuery 插件常用的网站:
3. jQuery 插件库 http://www.jq22.com/
4. jQuery 之家 http://www.htmleaf.com/
jQuery 插件使用步骤:
5. 引入相关文件。(jQuery 文件 和 插件文件)
6. 复制相关html、css、js (调用插件)。

ajax

参数 参数类型及默认值 说明
url 类型:String 默认值: 当前页地址。发送请求的地址 请求的地址
type 类型:String默认值: “GET”) 请求方式 (“POST” 或 “GET”)
data 类型:String 发送到服务器的数据,会被jquery自动转化为查询字符串
dataType 类型:String,默认由浏览器自动判断 期待服务器返回的数据类型
error 类型:Function 请求失败时调用此函数
success 类型:Function 请求成功后的回调函数
complete(XHR, TS) 类型:Function 请求完成后回调函数 (请求成功或失败之后均调用)
contentType 类型:String 默认值: “application/x-www-form-urlencoded”。发送信息至服务器时内容编码类型 发送请求时使用的内容类型,即请求首部的content-Type

猜你喜欢

转载自blog.csdn.net/qq_44866153/article/details/108032864