jQuery高级(—)

559 阅读3分钟

今日内容:

1. JQuery 高级
	1. 动画
	2. 遍历
	3. 事件绑定
	4. 案例
	5. 插件

JQuery 高级

1. 动画

	1. 三种方式显示和隐藏元素
		1. 默认显示和隐藏方式
			1. show([speed,[easing],[fn]])
				1. 参数:
					1. speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)
					2. easing:用来指定切换效果,默认是"swing",可用参数"linear"
						* swing:动画执行时效果是 先慢,中间快,最后又慢
						* linear:动画执行时速度是匀速的
					3. fn:在动画完成时执行的函数,每个元素执行一次。

			2. hide([speed,[easing],[fn]])
			3. toggle([speed],[easing],[fn])
		
		2. 滑动显示和隐藏方式
			1. slideDown([speed],[easing],[fn])
			2. slideUp([speed,[easing],[fn]])
			3. slideToggle([speed],[easing],[fn])

		3. 淡入淡出显示和隐藏方式
			1. fadeIn([speed],[easing],[fn])
			2. fadeOut([speed],[easing],[fn])
			3. fadeToggle([speed,[easing],[fn]])

案例代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
    <script>
        //隐藏div
        function hideFn() {
            // $("#showDiv").hide("slow","swing",function () {
            //     alert("隐藏了!")
            // });
            //滑动方式
            // $("#showDiv").slideUp("slow");
            //淡入淡出方式
            $("#showDiv").fadeOut("slow");
        }
        //显示div(slow表示速度,liner表示执行的效果(先慢再快再慢,liner匀速))
        function showFn() {
            // $("#showDiv").show("slow","liner",function () {
            //     alert("显示了!")
            // });
            //滑动方式
            // $("#showDiv").slideDown("slow");
            //淡入淡出方式
            $("#showDiv").fadeIn("slow");
        }
        //切换显示和隐藏div
        function toggleFn() {
            // $("#showDiv").toggle("slow");
            //滑动方式
            //$("#showDiv").slideToggle("slow");
            //淡入淡出方式
            $("#showDiv").slideToggle("slow");
        }
    </script>
</head>
<body>
<input type="button" value="点击按钮隐藏div" onclick="hideFn()">
<input type="button" value="点击按钮显示div" onclick="showFn()">
<input type="button" value="点击按钮切换div显示和隐藏" onclick="toggleFn()">

<div id="showDiv" style="width:300px;height:300px;background:pink">
    div显示和隐藏
</div>
</body>
</html>

2. 遍历

	1. js的遍历方式
		* for(初始化值;循环结束条件;步长)
	2. jq的遍历方式
		1. jq对象.each(callback)
			1. 语法:
				jquery对象.each(function(index,element){});
					* index:就是元素在集合中的索引
					* element:就是集合中的每一个元素对象

					* this:集合中的每一个元素对象
			2. 回调函数返回值:
				* true:如果当前function返回为false,则结束循环(break)。
				* false:如果当前function返回为true,则结束本次循环,继续下次循环(continue)
		2. $.each(object, [callback])
		3. for..of: jquery 3.0 版本之后提供的方式
			for(元素对象 of 容器对象)

遍历代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        /**
         * 遍历:
         *  1、js遍历方式
         *      for(初始值;循环结束条件;步长)
         *  2、jq的遍历方式
         *      1、jq对象.each(callback)
         *      2、$.each(object,[callback])
         *      3、for..of  增强for循环
         */
        <!--入口函数-->
        $(function () {
           //1、获取ul下的所有li
            var cites = $("#city li");
            //2、遍历
            for (var i = 0; i <cites.length ; i++) {
                //判断是否为上海
                // if("上海" == cites[i].innerHTML){
                //     break;//结束循环
                //     continue;//结束本次循环,执行其他循环
                // }
                //获取内容
                alert(i+":"+cites[i].innerHTML);
            }
            //2、jq对象.each(callback)
            cites.each(function (index,element) {
                //3、1获取li对象,第一种方式this
                // alert(this.innerHTML);//this代表js对象
                // alert($(this).html());//将this代表的js对象转换为jqueryu对象$(this)
                // //3、2获取li对象,第二种方式: 在回调函数中定义参数  index(索引) element(元素对象)
                // alert(index+":"+element.innerHTML);
                // alert(index+":"+$(element).html());
                //判断如果是上海,则结束循环
                // if("上海" == $(element).html()){
                //     //1、如果当前function返回为false,结束循环(break)
                //     //return false;
                //     //2、如果当前function返回为true,执行下次循环(continue)
                //     return true;
                // }
                // alert(index+":"+$(element).html());
             });
                //3、$.each(object,[callback])  全局遍历
                    //3.1第一种方式:this
                // $.each(cites,function () {
                //     alert($(this).html());
                    // //3、2获取li对象,第二种方式: 在回调函数中定义参数  index(索引) element(元素对象)
                    // alert(index+":"+element.innerHTML);
                    // alert(index+":"+$(element).html());
                    //判断如果是上海,则结束循环
                    // if("上海" == $(element).html()){
                    //     //1、如果当前function返回为false,结束循环(break)
                    //     //return false;
                    //     //2、如果当前function返回为true,执行下次循环(continue)
                    //     return true;
                    // }
                    // alert(index+":"+$(element).html());
                //});
            //4、for..of  增强for循环  jquery 3.0版本以后可用
            for(li of citys){
                alert($("li").html());
            }
        });

    </script>
</head>
<body>
<ul id="city">
    <li>北京</li>
    <li>上海</li>
    <li>天津</li>
    <li>重庆</li>
</ul>
</body>
</html>

3. 事件绑定

	1. jquery标准的绑定方式
		* jq对象.事件方法(回调函数);
		* 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为。
			* 表单对象.submit();//让表单提交
	2. on绑定事件/off解除绑定
		* jq对象.on("事件名称",回调函数)
		* jq对象.off("事件名称")
			* 如果off方法不传递任何参数,则将组件上的所有事件全部解绑
	3. 事件切换:toggle
		* jq对象.toggle(fn1,fn2...)
			* 当单击jq对象对应的组件后,会执行fn1.第二次点击会执行fn2.....
			
		* 注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。
			 <script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8"></script>

事件绑定代码

一般绑定代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        <!--入口函数-->
        $(function () {
            //1、获取name对象,绑定click事件
            $("#name").click(function () {
                alert("我被点击了")
            });
            //2、给name绑定鼠标移动到元素之上事件,绑定鼠标移出事件
            $("#name").mousemove(function () {
                alert("鼠标来了!")
            });
            $("#name").mouseout(function () {
                alert("鼠标走了!")
            });
            //简化操作,链式编程
            $("#name").mouseover(function () {
                alert("鼠标来了!")
            }).mouseout(function () {
                alert("鼠标走了!")
            });
            alert("我要获得焦点了。。。")
            $("#name").focus();//让文本输入框获得焦点
            //$("#name").submit();//让表单提交(表单对象.submit)
        })

    </script>
</head>
<body>
<input id="name" type="text" value="绑定点击事件">
</body>
</html>

on绑定 off解绑代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        <!--入口函数-->
        $(function () {
           //1、使用on给按钮绑定单击事件  click
            $("#btn").on("click",function () {
                alert("我被点击了!");
            })
            //2、使用pff解除btn按钮的单机事件
            $("#btn2").click(function () {
                $("#btn").off("click");
                $("#btn").off();//将组件上的所有事件全部解绑
            });
        });

    </script>
</head>
<body>
<input id="btn" type="button" value="使用on绑定点击事件">
<input id="btn2" type="button" value="使用off解绑点击事件">
</body>
</html>

事件切换绑定代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
        <!--入口函数-->
        $(function () {
            //1、获取按钮,调用toggle方法(jquery 1.9版本之后,将toggle绑定事件的方法移出,只能使用切换效果功能,如果想用,必须引入jquery-migrate-1.0.0.js包)
            $("#btn").toggle(function () {
                //改变div背景色为绿色
                $("#myDiv").css("backgroundColor","green");
            },function () {
                //改变div背景色为红色
                $("#myDiv").css("backgroundColor",pink);
            });
        });
        

    </script>
</head>
<body>

    <input id="btn" type="button" value="事件切换">
    <div id="myDiv" style="width:300px;height:300px;background:pink">
        点击按钮变成绿色,再次点击红色
    </div>
</body>
</html>

4. 案例

4.1 广告显示和隐藏

		<!DOCTYPE html>
		<html>
		<head>
		    <meta charset="UTF-8">
		    <title>广告的自动显示与隐藏</title>
		    <style>
		        #content{width:100%;height:500px;background:#999}
		    </style>
		
		    <!--引入jquery-->
		    <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
		    <script>
		        /*
		            需求:
		                1. 当页面加载完,3秒后。自动显示广告
		                2. 广告显示5秒后,自动消失。
		
		            分析:
		                1. 使用定时器来完成。setTimeout (执行一次定时器)
		                2. 分析发现JQuery的显示和隐藏动画效果其实就是控制display
		                3. 使用  show/hide方法来完成广告的显示
		         */
		
		        //入口函数,在页面加载完成之后,定义定时器,调用这两个方法
		        $(function () {
		           //定义定时器,调用adShow方法 3秒后执行一次
		           setTimeout(adShow,3000);
		           //定义定时器,调用adHide方法,8秒后执行一次
		            setTimeout(adHide,8000);
		        });
		        //显示广告
		        function adShow() {
		            //获取广告div,调用显示方法
		            $("#ad").show("slow");
		        }
		        //隐藏广告
		        function adHide() {
		            //获取广告div,调用隐藏方法
		            $("#ad").hide("slow");
		        }
		
		
		
		    </script>
		</head>
		<body>
		<!-- 整体的DIV -->
		<div>
		    <!-- 广告DIV -->
		    <div id="ad" style="display: none;">
		        <img style="width:100%" src="../img/adv.jpg" />
		    </div>
		
		    <!-- 下方正文部分 -->
		    <div id="content">
		        正文部分
		    </div>
		</div>
		</body>
		</html>

5. 插件:增强JQuery的功能

	1. 实现方式:
		1. $.fn.extend(object) 
			* 增强通过Jquery获取的对象的功能  $("#id")
		2. $.extend(object)
			* 增强JQeury对象自身的功能  $/jQuery

写在最后

推荐自己的Github地址:github.com/Lmobject

欢迎star