JQuery拓展案例

拓展案例

JQuery选择器:排它思想-按钮变色

点击按钮当前元素变色,其他元素回复正常

通过隐式迭代和siblings兄弟元素,变化自己,清除其他

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

JQuery选择器:淘宝服饰精品案例分析

核心原理∶鼠标经过左侧盒子某个小li,就让内容区盒子相对应图片显示,其余的图片隐藏。

需要得到当前小li的索引号,就可以显示对应索引号的图片

JQuery得到当前元素索引号$(this).index()

中间对应的图片,可以通过eq(index)方法去选择

显示元素show()隐藏元素hide()

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

JQuery样式:tab栏切换

点击上部的li,当前li添加current类,其余兄弟移除类。

点击的同时,得到当前li的索引号

让下部里面相应索引号的item显示,其余的item隐藏

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

JQuery效果:手风琴效果

鼠标经过某个小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元素操作:购物车案例模块

购物车案例模块-计算总计和总额

核心思路:把所有文本框里面的值相加就是总计数量。总额同理

文本框里面的值不相同,如果想要相加需要用到each遍历。声明一个变量,相加即可

点击+号-号,会改变总计和总额,如果用户修改了文本框里面的值同样会改变总计和总额

因此可以封装一个函数求总计和总额的,以上2个操作调用这个函数即可。

注意1:总计是文本框里面的值相加用val()总额是普通元素的内容用text()

注意2:普通元素里面的内容要去掉¥并且转换为数字型才能相加

// 5. 计算总计和总额模块
function getSum() {
    var count = 0; // 计算总件数
    var money = 0; // 计算总价钱
    $(".itxt").each(function (i, ele) { // i索引号 ele元素
    	count += parseInt($(ele).val());
    });
    $(".amount-sum em").text(count);
    $(".p-sum").each(function (i, ele) {
    	money += parseFloat($(ele).text().substr(1)); // 取值,去除¥符号
    });
	$(".price-sum em").text("¥" + money.toFixed(2)) // 保留两位小数
};

购物车案例模块-删除商品模块

核心思路:把商品remove)删除元素即可

有三个地方需要删除:1.商品后面的删除按钮⒉删除选中的商品3.清理购物车

商品后面的删除按钮:一定是删除当前的商品,所以从$(this)出发

删除选中的商品:先判断小的复选框按钮是否选中状态,如果是选中,则删除对应的商品

// 6. 删除商品模块
$(".p-action a").click(function () { // 商品后面的删除按钮
	$(this).parents(".cart-item").remove();
	getSum() // 计算总计
});
$(".remove-batch").click(function () { // 删除选中的商品
	// .j-checkbox:checked选中状态的复选框
	$(".j-checkbox:checked").parents(".cart-item").remove();
		getSum() // 计算总计
	});
	$(".clear-all").click(function () { // 清空购物车 删除全部商品
   		$(".cart-item").remove();
    	getSum() // 计算总计
	});
})

购物车案例模块-选中商品添加背景

核心思路:选中的商品添加背景,不选中移除背景即可

全选按钮点击∶如果全选是选中的,则所有的商品添加背景,否则移除背景

小的复选框点击︰如果是选中状态,则当前商品添加背景,否则移除背景

这个背景,可以通过类名修改,添加类和删除类

if ($(this).prop("checked")) { // 选中添加check-cart-item类
	$(".cart-item").addClass("check-cart-item");
} else { // 没选中移除check-cart-item类
	$(".cart-item").removeClass("check-cart-item");
}

JQuery位置操作:带有动画的返回顶部

页面向下滚动到返回顶部盒子距离时,出现返回顶部,点击后慢慢返回顶部

核心原理:使用animate动画返回顶部(animate(obj, target, callback))。

但是是元素做动画,因此$(“body,html" ).animate([scrollTop: 0))

animate函数封装obj目标对象 target 目标位置 callback回调函数

animate动画函数里面有个scrollTop属性,可以设置位置

$(function () {
    var boxTop = $(".container").offset().top;  // 返回顶部盒子高度
    $(window).scroll(function () {
        // 被卷去的头部 scrollTop()  / 被卷去的左侧 scrollLeft()
        // 可以设置和获取
        if ($(window).scrollTop() >= boxTop) {
        	// console.log("已到达");
        	$(".back").fadeIn();  // 返回顶部淡入
        } else {
        	$(".back").fadeOut();  // 返回顶部淡出
        }
    });
    $(".back").click(function () {
        // animate(obj, target, callback)
        // animate函数封装obj目标对象 target 目标位置 callback回调函数
        // 但是是元素做动画,因此$(“body, html" ).animate([scrollTop: 0))
        $("body,html").animate({ scrollTop: 0 });
    })
})

JQuery位置操作:品优购电梯导航

当我们滚动到今日推荐模块,就让电梯导航显示出来

点击电梯导航页面可以滚动到相应内容区域

核心算法:因为电梯导航模块和内容区模块——对应的

当我们点击电梯导航某个小模块,就可以拿到当前小模块的索引号

就可以把animate要移动的距离求出来∶当前索引号内容区模块它的offset().top

然后执行动画即可

当我们点击电梯导航某个小li,当前小li添加current类,兄弟移除类名

当我们页面滚动到内容区域某个模块,左侧电梯导航,相对应的小i模块,也会添加current类,兄弟移除current类。

触发的事件是页面滚动,因此这个功能要写到页面滚动事件里面。

需要用到each,遍历内容区域大模块。each里面能拿到内容区域每一个模块元素和索引号

判断的条件:被卷去的头部大于等于内容区域里面每个模块的offset().top

就利用这个索引号找到相应的电梯导航小li添加类。

$(function () {
    // 当我们点击了小li 此时不需要执行 页面滚动事件里面的 li 的背景选择 添加 current,通过节流阀判定互斥
    // 1. 显示隐藏电梯导航
    var toolTop = $(".recommend").offset().top;  // 推荐服务盒子高度
    var flag = true;  // 节流阀  互斥锁 
    toggleTool();
    function toggleTool() {  // 封装电梯导航展示效果
        if ($(document).scrollTop() >= toolTop) {
            $(".fixedtool").fadeIn();
        } else {
            $(".fixedtool").fadeOut();
        };
    }
    $(window).scroll(function () {
        toggleTool();  // 调用函数
        // 3. 页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current类名
        // 通过each遍历四个大模块
        $(".floor .w").each(function (i, ele) {
            if ($(document).scrollTop() >= $(ele).offset().Top) {  // 判断已到达大模块位置
                $(".fixedtool li").eq(i).addClass("current").siblings().removeClass("current");
            }
        })
        if (flag) {  // 节流阀,避免点击时页面跳动
            $(".floor .w").each(function (i, ele) {
                if ($(document).scrollTop() >= $(ele).offset().top) {
                    $(".fixedtool li").eq(i).addClass("current").siblings().removeClass();
                }
            })
        }
    })
    // 2. 点击电梯导航页面可以滚动到相应内容区域
    $(".fixedtool li").click(function () {
        flag = false;  // 节流阀,点击时不执行页面滚动判断
        // var index = $(this).index();  获取点击元素索引值
        var current = $(".floor .w").eq($(this).index()).offset().top;
        // 页面动画滚动效果
        $("body,html").stop().animate({
            scrollTop: current
        }, function () {
            flag = true;  // 节流阀,点击跳转动画执行完毕时执行页面滚动判断
        });
        // 点击之后,让当前的小li 添加current 类名 ,姐妹移除current类名
        $(this).addClass("current").siblings().removeClass("current");
    })
})

本地存储: toDoList

文本框里面输入内容,按下回车,就可以生成待办事项。

点击待办事项复选框,就可以把当前数据添加到已完成事项里面。

点击已完成事项复选框,就可以把当前数据添加到特办事项里面。

但是本页面内容刷新页面不会丢失。

刷新页面不会丢失数据,因此需要用到本地存储localStorage

核心思路∶不管按下回车,还是点击复选框,都是把本地存储的数据加载到页面中,这样保证刷新关闭页面不会丢失数据

存储的数据格式: var todolist = [title: 'xxx’, done: false]]

注意点1∶本地存储localStorage里面只能存储字符串格式,因此需要把对象转换为字符串JSON.stringify(data)。

注意点2∶获取本地存储数据,需要把里面的字符串转换为对象格式JSON.parse()我们才能使用里面的数据。

切记︰页面中的数据,都要从本地存储里面获取,这样刷断页面不会丢失数据,所以先要把数据保存到本地存储里面。

利用事件对象.keyCode判断用户按下回车键(13)。声明一个数组,保存数据。

先要读取本地存储原来的数据(声明函数getData(),放到这个数组里面。之后把最新从表单获取过来的数据,追加到数组里面。

最后把数组存储给本地存储(声明函数savaDate0)

toDoList本地存储数据渲染加载到页面

因为后面也会经常渲染加载操作,所以声明一个函数load,方便后面调用

先要读取本地存储数据。(数据不要忘记转换为对象格式)

之后遍历这个数据($.each0 ),有几条数据,就生成几个小li添加到ol里面。

每次渲染之前,先把原先里面ol的内容清空,然后渲染加载最新的数据。

toDoList删除操作

点击里面的a链接,不是删除的li,而是删除本地存储对应的数据。

核心原理∶先获取本地存储数据,删除对应的数据,保存给本地存储,重新渲染列表li

我们可以给链接自定义属性记录当前的索引号

根据这个索引号删除相关的数据----数组的splice(i, 1)方法

存储修改后的数据,然后存储给本地存储

重新渲染加载数据列表

因为a是动态创建的,我们使用on方法绑定事件

toDoList正在进行和已完成选项操作

当我们点击了小的复选框,修改本地存储数据,再重新渲染数据列表。

点击之后,获取本地存储数据。

修改对应数据属性done为当前复选框的checked状态。

之后保存数据到本地存储重新渲染加载数据列表

load加载函数里面,新增一个条件如果当前数据的done为true就是已经完成的,就把列表渲染加载到ul里面

如果当前数据的done为false,则是待办事项,就把列表渲染加载到ol里面

toDoList统计正在进行个数和已经完成个数

在我们load函数里面操作

声明2个变量: todoCount待办个数doneCount 已完成个数

当进行遍历本地存储数据的时候,如果数据done为false,则todoCount++,否则doneCount++

$(function () {
   // 1. 按下回车 把完整数据 存储到本地存储里面
   // 存储的数据格式  var todolist = [{title: "xxx", done: false}]
   load();  // 页面加载调用
   $("#title").on("keydown", function (e) {
       if (e.keyCode == 13) {
           var local = getDate();  // 把本地存储中的数据返回给local
           // 把local数组进行更新数据 把最新的数据追加给local数组
           local.push({ title: $(this).val(), done: false });
           // 把这个数组local 存储给本地存储
           setDate(local);
           load();
           $(this).val("");  // 清空输入框内容
       }
   })

   // 3. toDoList 删除操作
   $("ol, ul").on("click", "a", function () {
       // 先获取本地存储
       var data = getDate();
       // 修改数据
       var index = $(this).attr("id");  // 获取点击元素的索引号
       // splice(index,num) 删除数组元素,从索引号index开始,删除num个
       data.splice(index, 1);
       // 保存到本地存储
       setDate(data);
       // 重新渲染页面
       load();
   })

   // 4. toDoList 正在进行和已完成选项操作
   $("ol ,ul").on("click", "input", function () {
       // 先获取本地存储的数据
       var data = getDate();
       // 修改数据
       var index = $(this).siblings("a").attr("id");
       data[index].done = $(this).prop("checked");  // 把当前复选框状态传递给本地数据
       console.log(data);
       // 保存到本地存储
       setDate(data);
       // 重新渲染页面
       load();
   })
   // 读取本地存储数据
   function getDate() {
       var data = localStorage.getItem("todolist");
       if (data) {
       	// 本地存储里面的数据是字符串格式的 但是我们需要的是对象格式的
       	return JSON.parse(data);
       } else {
       	return [];
       }
   }
   // 保存本地存储数据
   function setDate(data) {
       // localStorage.setItem(key, value);  保存本地存储数据
       // 本地存储只识别字符串格式,数据转成字符串个事
       localStorage.setItem("todolist", JSON.stringify(data));
   }

   // 渲染加载数据
   function load() {
       // 读取本地存储的数据
       var data = getDate();
       // 遍历之前先要清空ol里面的元素内容
       $("ol, ul").empty();
       var todoCount = 0; // 正在进行的个数
       var doneCount = 0; // 已经完成的个数
       // 遍历这个数据
       $.each(data, function (i, n) {
           // console.log(n);
           if (n.done) {
           $("ul").prepend("<li><input type='checkbox' checked='checked' > <p>" + n.title + "</p> <a href='javascript:;' id=" + i + " ></a></li>");
       	doneCount++;
           } else {
           	$("ol").prepend("<li><input type='checkbox' > <p>" + n.title + "</p> <a href='javascript:;' id=" + i + " ></a></li>");
           	todoCount++;
           }
       });
       $("#todoCount").text(todoCount);
       $("#donecount").text(doneCount);
   }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值