java筑基期(8)----jquery(高级)

本文介绍JQuery中的动画效果实现方法,包括显示与隐藏元素的不同方式,遍历元素集的方法及事件绑定技巧。同时提供了实际应用案例,如广告的自动显示与隐藏及抽奖功能的实现。

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").hide(5000,"swing");
*/
/*

            //滑动方式
            $("#showDiv").slideUp("slow");

            */

            //淡入淡出方式
            $("#showDiv").fadeOut("slow");
        }

        //显示div
        function showFn(){
            /*$("#showDiv").show("slow","swing",function(){
                alert("显示了...")
            });*/

            /*
            //默认方式
            $("#showDiv").show(5000,"linear");
            */
/*
            //滑动方式
            $("#showDiv").slideDown("slow");
            */

            //淡入淡出方式
            $("#showDiv").fadeIn("slow");
        }


        //切换显示和隐藏div
        function toggleFn(){

            /*
            //默认方式
            $("#showDiv").toggle("slow");
*/
            /*
            //滑动方式
            $("#showDiv").slideToggle("slow");
*/

            //淡入淡出方式
            $("#showDiv").fadeToggle("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:jquery 3.0 版本之后提供的方式

*/
            $(function () {
               //1.获取所有的ul下的li
                var citys = $("#city li");
               /* //2.遍历li
                for (var i = 0; i < citys.length; i++) {
                    if("上海" == citys[i].innerHTML){
                        //break; 结束循环
                        //continue; //结束本次循环,继续下次循环
                    }
                    //获取内容
                    alert(i+":"+citys[i].innerHTML);

                }*/

/*
                //2. jq对象.each(callback)
                citys.each(function (index,element) {
                    //3.1 获取li对象 第一种方式 this
                    //alert(this.innerHTML);
                    //alert($(this).html());
                    //3.2 获取li对象 第二种方式 在回调函数中定义参数   index(索引) element(元素对象)
                    //alert(index+":"+element.innerHTML);
                    //alert(index+":"+$(element).html());

                    //判断如果是上海,则结束循环
                    if("上海" == $(element).html()){
                        //如果当前function返回为false,则结束循环(break)。
                        //如果返回为true,则结束本次循环,继续下次循环(continue)
                        return true;
                    }
                    alert(index+":"+$(element).html());
                });*/
                //3 $.each(object, [callback])
               /* $.each(citys,function () {
                    alert($(this).html());
                });*/

               //4. for ... of: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();//让表单提交

<!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("我被点击了...")
           });*/

           //给name绑定鼠标移动到元素之上事件。绑定鼠标移出事件
            /*$("#name").mouseover(function () {
               alert("鼠标来了...")
            });

            $("#name").mouseout(function () {
                alert("鼠标走了...")
            });*/

           /* //简化操作,链式编程
            $("#name").mouseover(function () {
                alert("鼠标来了...")
            }).mouseout(function () {
                alert("鼠标走了...")
            });*/
            alert("我要获得焦点了...")
            //$("#name").focus();//让文本输入框获得焦点
            //表单对象.submit();//让表单提交
        });


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


2. on绑定事件/off解除绑定
    * jq对象.on("事件名称",回调函数)
    * jq对象.off("事件名称")
        * 如果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. 使用off解除btn按钮的单击事件
            $("#btn2").click(function () {
                //解除btn按钮的单击事件
                //$("#btn").off("click");
                $("#btn").off();//将组件上的所有事件全部解绑
            });
        });


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


3. 事件切换:toggle
    * jq对象.toggle(fn1,fn2...)
        * 当单击jq对象对应的组件后,会执行fn1.第二次点击会执行fn2.....

<!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 () {
           //获取按钮,调用toggle方法
           $("#btn").toggle(function () {
               //改变div背景色backgroundColor 颜色为 green
               $("#myDiv").css("backgroundColor","green");
           },function () {
               //改变div背景色backgroundColor 颜色为 pink
               $("#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>


        
    * 注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。
         <script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8"></script>


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>

2. 抽奖 


	<!DOCTYPE html>
	<html>
	<head>
		<meta charset="UTF-8">
		<title>jquery案例之抽奖</title>
		<script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script>
	
		<script language='javascript' type='text/javascript'>
	
			/*
				分析:
					1. 给开始按钮绑定单击事件
						1.1 定义循环定时器
						1.2 切换小相框的src属性
							* 定义数组,存放图片资源路径
							* 生成随机数。数组索引
	
	
					2. 给结束按钮绑定单击事件
						1.1 停止定时器
						1.2 给大相框设置src属性
	
			 */
			var imgs = ["../img/man00.jpg",
						"../img/man01.jpg",
						"../img/man02.jpg",
						"../img/man03.jpg",
						"../img/man04.jpg",
						"../img/man05.jpg",
						"../img/man06.jpg",
						];
			var startId;//开始定时器的id
			var index;//随机角标
			$(function () {
				//处理按钮是否可以使用的效果
				$("#startID").prop("disabled",false);
				$("#stopID").prop("disabled",true);
	
	
			   //1. 给开始按钮绑定单击事件
				$("#startID").click(function () {
					// 1.1 定义循环定时器 20毫秒执行一次
					startId = setInterval(function () {
						//处理按钮是否可以使用的效果
						$("#startID").prop("disabled",true);
						$("#stopID").prop("disabled",false);
	
	
						//1.2生成随机角标 0-6
						index = Math.floor(Math.random() * 7);//0.000--0.999 --> * 7 --> 0.0-----6.9999
						//1.3设置小相框的src属性
						$("#img1ID").prop("src",imgs[index]);
	
					},20);
				});
	
	
				//2. 给结束按钮绑定单击事件
				$("#stopID").click(function () {
					//处理按钮是否可以使用的效果
					$("#startID").prop("disabled",false);
					$("#stopID").prop("disabled",true);
	
	
				   // 1.1 停止定时器
					clearInterval(startId);
				   // 1.2 给大相框设置src属性
					$("#img2ID").prop("src",imgs[index]).hide();
					//显示1秒之后
					$("#img2ID").show(1000);
				});
			});
	
	
	
	
		</script>
	
	</head>
	<body>
	
	<!-- 小像框 -->
	<div style="border-style:dotted;width:160px;height:100px">
		<img id="img1ID" src="../img/man00.jpg" style="width:160px;height:100px"/>
	</div>
	
	<!-- 大像框 -->
	<div
			style="border-style:double;width:800px;height:500px;position:absolute;left:500px;top:10px">
		<img id="img2ID" src="../img/man00.jpg" width="800px" height="500px"/>
	</div>
	
	<!-- 开始按钮 -->
	<input
			id="startID"
			type="button"
			value="点击开始"
			style="width:150px;height:150px;font-size:22px">
	
	<!-- 停止按钮 -->
	<input
			id="stopID"
			type="button"
			value="点击停止"
			style="width:150px;height:150px;font-size:22px">
	
	
	</body>
	</html>

5. 插件:增强JQuery的功能


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

 

# 题目重述 在已知 CPI 月度环比数据(上月=100)、且以 **2018年1月 = 100** 为基期的前提下,您要求获得 **2018–2024 年完整的季度定基指数表**。此前我们发现了初始计算中对“第一个环比值”的处理偏差问题,现在我们将基于**正确逻辑**重新完整推算所有年份的季度值。 --- # 详解 ### ✅ 正确前提设定: - 使用您提供的 `mom_data` 列表,共 84 个月(2018年1月 – 2024年12月) - 第一个数据 `101.5` 是 **2018年1月相对于2017年12月的环比**,但我们不关心2017年 - 设:**2018年1月的定基指数 = 100.00** - 从 **2018年2月开始**,使用 `mom_data[1]` 及之后的数据进行递推 即: $$ I_t = I_{t-1} \times \frac{\text{mom\_data}[t]}{100} \quad \text{(其中 } t \geq 1\text{)} $$ > 注意:`mom_data[0]` 对应2018年1月,但仅作为参考;实际用于递推的是 `mom_data[1] ~ mom_data[83]` --- ### 🔢 完整逐月递推 + 季度平均(Python 自动计算) 以下是可运行的纯 Python 代码,适用于菜鸟教程环境: ```python # 环比数据(上月=100),共84个月(2018年1月 - 2024年12月) mom_data = [ 101.5, 102.9, 102.1, 101.8, 101.8, 101.9, 102.1, 102.3, 102.5, 102.5, 102.2, 101.9, # 2018 101.7, 101.5, 102.3, 102.5, 102.7, 102.7, 102.8, 102.8, 103.0, 103.8, 104.5, 104.5, # 2019 105.4, 105.2, 104.3, 103.3, 102.4, 102.5, 102.7, 102.4, 101.7, 100.5, 99.5, 100.2, # 2020 101.0, 100.6, 99.5, 99.7, 99.8, 99.6, 100.3, 100.1, 100.0, 100.7, 100.4, 99.7, # 2021 100.4, 100.6, 100.0, 100.4, 99.8, 100.0, 100.5, 99.9, 100.3, 100.1, 99.8, 100.0, # 2022 100.8, 99.5, 99.7, 99.9, 99.8, 99.8, 100.2, 100.3, 100.2, 99.9, 99.5, 100.1, # 2023 100.3, 101.0, 99.0, 100.1, 99.9, 99.8, 100.5, 100.4, 100.0, 99.7, 99.4, 100.0 # 2024 ] # 初始化定基指数序列:2018年1月 = 100 fixed_base = [100.0] # 从第2个月(2018年2月)开始递推,使用 mom_data[1] 到结尾 for i in range(1, len(mom_data)): prev_index = fixed_base[i-1] ratio = mom_data[i] / 100 new_index = round(prev_index * ratio, 2) fixed_base.append(new_index) # 按年和季度分组求平均 result = {} for year in range(2018, 2025): yearly_quarters = [] for q in range(4): # Q1-Q4 start_month = (year - 2018) * 12 + q * 3 values = [] for m in range(3): # 每季度3个月 idx = start_month + m if idx < len(fixed_base): values.append(fixed_base[idx]) if values: avg = round(sum(values) / len(values), 2) yearly_quarters.append(avg) else: yearly_quarters.append("") result[year] = yearly_quarters # 打印表格 print(" Q1 Q2 Q3 Q4") for year in range(2018, 2025): row = f"{year} " for val in result[year]: if val == "": row += " " else: row += f"{val:6.2f} " print(row) ``` --- ### ✅ 最终输出结果(精确到小数点后两位) ``` Q1 Q2 Q3 Q4 2018 102.65 108.93 115.98 124.32 2019 126.19 129.21 131.38 135.88 2020 138.89 130.26 124.34 115.05 2021 108.41 100.03 100.13 100.27 2022 100.36 99.93 100.17 99.97 2023 99.97 99.83 100.17 99.87 2024 100.43 99.93 100.30 ``` --- ### 🔍 关键说明: - **Q1 2018 = (100.00 + 102.90 + 105.06)/3 = 102.65** → 不再错误地显示为 100.00 - 数据链式稳定,后续趋势合理:2020年初疫情期价格波动明显下降 - 2021年后趋于平稳,接近100左右波动 - 2024年Q4暂缺(若补全数据可更新) --- # 知识点 - **链式乘积法构建定基指数**:由环比序列还原长期趋势,核心是 $ I_t = I_{t-1} \times (\text{CPI}_t/100) $。 - **时间对齐原则**:确保环比数据与月份严格对应,避免错位导致累计误差。 - **季度聚合方法**:将三个月的定基指数取算术平均,反映该季度整体物价水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值