jQuery 一 jQuery 使用,对象转换, API的选择器,隐式迭代,排他思想,.index(),css方法属性操作,类样式操作Class,jQuery效果(隐藏,滑动,淡入,动画)

1. jQuery概述–入门

1.1 JavaScript 库

JavaScript库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等。
简单理解: 就是一个JS 文件,里面对我们原生js代码进行了封装,存放到里面。这样我们可以快速高效的使用,比如 jQuery,就是为了快速方便的操作DOM,里面基本都是函数(方法)。

常见的JavaScript库:
jQuery ,Prototype ,YUI ,Dojo ,Ext JS ,移动端的zepto
这些库都是对原声JavaScript的封装,内部都是用 JavaScript实现的。

1.2 jQuery的概念

jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。
j 就是 JavaScript; Query 查询; 意思就是查询js,把js中的DOM操作做了封装,我们可以快速的查询使用里面的功能。
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
学习jQuery本质: 就是学习调用这些函数(方法)。
jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。

1.3 jQuery的优点

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

2. jQuery的使用

各个版本的下载:https://code.jquery.com/
1x :兼容 IE 678 等低版本浏览器, 官网不再更新
2x :不兼容 IE 678 等低版本浏览器, 官网不再更新
3x :不兼容 IE 678 等低版本浏览器, 是官方主要更新维护的版本
1.引入jQuery文件 2.使用即可

2.1jQuery的入口函数

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

2.1jQuery的顶级对象

  1. $ 是 jQuery 的别称,在代码中可以使用 jQuery 代替 $,但一般为了方便,通常都直接使用 $ 。
  2. $ 是jQuery 的顶级对象, 相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法。
        // 1. $ 是jQuery的别称(另外的名字)
        // $(function() {
     
        //     alert(11)
        // });
        jQuery(function() {
     
            // alert(11)
            // $('div').hide();
            jQuery('div').hide();
        });
        // 2. $同时也是jQuery的 顶级对象

2.5 jQuery 对象和 DOM 对象简介

  1. 用原生 JS 获取来的对象就是 DOM 对象
        var mySpan = document.querySelector('span'); // mySpan 是DOM对象
  1. jQuery 方法获取的元素就是 jQuery 对象。
         $('div');       // $('div')是一个jQuery 对象
  1. jQuery 对象本质是: 利用$对DOM 对象包装后产生的对象(伪数组形式存储)。
    注意:
    只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JavaScirpt 方法。

2.5 jQuery 对象和 DOM 对象相互转换

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

         1. DOM对象转换为 jQuery对象
        // (1) 我们直接获取视频,得到就是jQuery对象
           $('video');
        // (2) 我们已经使用原生js 获取过来 DOM对象
        var myvideo = document.querySelector('video');
        // $(myvideo).play();  jquery里面没有play 这个方法
         2.  jQuery对象转换为DOM对象(有两种方式)
        // myvideo.play();
        $('video')[0].play()             方式1    []
        $('video').get(0).play()         方式2   ()里面填索引号       
        

** jQuery常用API**

1.0 jQuery选择器

1.1 jQuery基础选择器

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

	$("#id");$("*");$(".class");$("div");$("div,p,li");$("li.current");

1.2 jQuery 层级选择器

	子代选择器 $("ul>li")    表示亲儿子层级的元素。
	子代选择器 $("ul li")    表示ul下的所以li  包括孙子级别

1.3 隐式迭代(重要)

遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。

1.4 jQuery 筛选选择器

筛选选择器,顾名思义就是在所有的选项中选择满足条件的进行筛选选择.

    <ul>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
    </ul>
    <ol>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
        <li>多个里面筛选几个</li>
    </ol>
    <script>
        $(function() {
     
            $("ul li:first").css("background", "pink");    获取第一个
            $("ul li:last").css("background", "blue");     获取最后一个
            $("ul li:eq(3)").css("background", "red");     获取index个,index从0开始。
            $("ol li:odd").css("background", "yellow");    获取索引号为奇数的
            $("ol li:even").css("background", "red");      获取索引号为偶数的
        })
    </script>

1.5 jQuery 筛选方法(重点)

            1.parent()  返回的是 最近一级的父级元素 亲爸爸
            console.log($(".son").parent());
            
            2.children()    find()
             (1) 亲儿子 children()  类似子代选择器  ul>li
             $(".nav").children("p").css("color", "red");
             (2) 可以选里面所有的孩子 包括儿子和孙子  find() 类似于后代选择器
            $(".nav").find("p").css("color", "red");
            
            3. 兄弟元素siblings 除了自身元素之外的所有亲兄弟
            $("ol .item").siblings("li").css("color", "red");

		    3. 第n个元素 eq()
            (1) 我们可以利用选择器的方式选择  :eq()
            (2) 我们可以利用选择方法的方式选择 更推荐这种写法
             $("ul li").eq(2).css("color", "blue");
             
             4. 判断是否有某个类名
             console.log($("div:first").hasClass("current"));
             console.log($("div:last").hasClass("current"));

		     5.  查找之前 和 之后 的所有同辈元素。
             $('.first').nextAll();查找当前元素之后所有的同辈元素
	         $('.last').prevAll(); 查找当前元素之前所有的同辈元素
            

1.6 jQuery 里面的排他思想

        $(function() {
     
             1. 隐式迭代  给所以的按钮都绑定了点击事件
            $("button").click(function() {
     
                 2. 当前的元素变化背景颜色
                $(this).css("background", "red");
                // 3. 其余的兄弟去掉背景颜色  隐式迭代
                $(this).siblings("button").css("background", "");
            })
        })

1.6 jQuery 的链式编程

链式编程是为了节省代码量,看起来更优雅。

         上面的代码用 链式编程 的写法:    
         $(this).css("color", "red").siblings().css("color", "");

1.7 案例–如何得到当前小li 的索引号

  1. 得到当前小li 的索引号
    var index = $(this).index();
        $(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();
                 5. 链式编程  把34 写在一起
                $("#content div").eq(index).show().siblings().hide();
            })
        })

2.0 jQuery样式操作

2.1 操作 css 方法

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

        $(function() {
     
            1. 只写属性名,返回的是值。  !属性名一定要加引号!
            console.log($("div").css("width"));  
            
            2. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,
                值如果是数字可以不用跟单位和引号
            $("div").css("width", "300px");
            $("div").css("width", 300);   
            
            3. 如果是复合属性则必须采取驼峰命名法,如果值不是数字,则需要加引号
            $("div").css({
     
                width: 400,
                height: 400,
                backgroundColor: "red"
            })
        })

2.2 设置类样式方法

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

        $(function() {
     
             1. 添加类 addClass()
             $("div").click(function() {
     
                  $(this).addClass("current");
             });
             
             2. 删除类 removeClass()
             $("div").click(function() {
     
                 $(this).removeClass("current");
             });
             
             3. 切换类 toggleClass()
            $("div").click(function() {
     
                $(this).toggleClass("current");
            });
        })

**2.3 案例:tab 栏切换分析 **

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

        $(function() {
     
             1.点击上部的li,当前li 添加current类,其余兄弟移除类
            $(".tab_list li").click(function() {
     
                // 链式编程操作
                $(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();
            });
        })

**2.4 类操作与className区别 **

原生 JS 中 className 会覆盖元素原先里面的类名。
jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。

         var one = document.querySelector(".one");
         one.className = "two";   // 这里 以前的 one 类名就会消失
         $(".one").addClass("two"); // 这个addClass相当于追加类名 不影响以前的类名,以前的one 还在

**3.0 jQuery 效果 **

jQuery 给我们封装了很多动画效果,最为常见的如下:
显示隐藏: show() hide() 转换 : toggle()
滑动: slideDown() slideUp() 转换:slideToggle()
淡入淡出: fadeIn() fadeOut() fadeTO() 转换:fadeToggle()
自定义动画: animate()

**3.1 显示隐藏效果 **

        $(function() {
     
            $("button").eq(0).click(function() {
     
                $("div").show(1000, function() {
     
                    alert(1);
                });
            })      这个10001秒后显示或隐藏,后面的函数是回调函数,完全隐藏后才弹出
            $("button").eq(1).click(function() {
     
                $("div").hide(1000, function() {
     
                    alert(1);      
                });
            })
            $("button").eq(2).click(function() {
     
                    $("div").toggle(1000);
                })
                 一般情况下,我们都不加参数直接显示隐藏就可以了
        });

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

建议:平时一般不带参数,直接显示隐藏即可。

**3.2 滑动效果 **

参数跟上方一样

        $(function() {
     
            $("button").eq(0).click(function() {
     
                 下滑动 slideDown()
                $("div").slideDown();
            })
            $("button").eq(1).click(function() {
     
                 上滑动 slideUp()   500是 滑动0.5$("div").slideUp(500);
            })
            $("button").eq(2).click(function() {
     
                 滑动切换 slideToggle()
                $("div").slideToggle(500);
            });

        });

**3.3 事件切换 加案例 **

	hover([over],out)

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

             鼠标经过
             $(".nav>li").mouseover(function() {
     
            //     // $(this) jQuery 当前元素  this不要加引号
            //     // show() 显示元素  hide() 隐藏元素
            //     $(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();
            });
        })

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

1. 动画或效果队列

动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。

2. 停止排队

	       .stop()
	       
	            $(".nav>li").hover(function() {
     
                 stop 方法必须写到动画的前面
                $(this).children("ul").stop().slideToggle();

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

3.5 淡入淡出效果

里面参数和上面一样,
但是 fadeTo()里面多一个参数, 这个的作用是 渐进方式调整到指定的不透明度(透明度取值 0-1 之间)
注意!!! 他的时间参数和透明度必须写。实例如下!

        $(function() {
     
            $("button").eq(0).click(function() {
     
                // 淡入 fadeIn()
                $("div").fadeIn(1000);
            })
            $("button").eq(1).click(function() {
     
                // 淡出 fadeOut()
                $("div").fadeOut(1000);

            })
            $("button").eq(2).click(function() {
     
                // 淡入淡出切换 fadeToggle()
                $("div").fadeToggle(1000);

            });
            $("button").eq(3).click(function() {
     
                  修改透明度 fadeTo() 这个速度和透明度要必须写
                $("div").fadeTo(1000, 0.5);

            });
        });

3.6 自定义动画 animate

参数比基础参数多一个 params。
params: 想要更改的样式属性,以对象形式传递,必须写。 属性名可以不用带引号, 如果是复合属性则需要采取驼峰命名法 borderLeft。其余参数都可以省略。

        $(function() {
     
            $("button").click(function() {
     
                $("div").animate({
         // 这个中括号里就是 params 参数。
                    left: 500,
                    top: 300,
                    opacity: .4,  这个是透明度
                    width: 500
                }, 500);
            })
        })

3.7 高亮显示案例

        $(function() {
     
            //鼠标进入的时候,其他的li标签透明度:0.5
            $(".wrap li").hover(function() {
     
                $(this).siblings().stop().fadeTo(400, 0.5);
            }, function() {
     
                // 鼠标离开,其他li 透明度改为 1
                $(this).siblings().stop().fadeTo(400, 1);
            })

        });

3.8 王者荣耀手风琴效果分析

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

        $(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();
            })
        });

你可能感兴趣的:(jQuery,javascript)