課程回顧:
? 動畫效果:基本動畫,滑動動畫,淡入淡出,自定義動畫效果(animate)
? 事件切換:hover(over,out);
? 停止動畫:stop
? 操作屬性:prop(固有屬性),attr(自定義屬性),data
? 文本內容值:html,text,val
案例:購物車案例模塊-增減商品數量
①核心思路:首先聲明一個變量,當我們點擊+號(increment),就讓這個值++,然后賦值給文本框。②注意1: 只能增加本商品的數量, 就是當前+號的兄弟文本框(itxt)的值。 ③修改表單的值是val() 方法④注意2: 這個變量初始值應該是這個文本框的值,在這個值的基礎上++。要獲取表單的值⑤減號(decrement)思路同理,但是如果文本框的值是1,就不能再減了,直接return false即可
**購物車案例模塊-**修改商品小計
①核心思路:每次點擊+號或者-號,根據文本框的值 乘以 當前商品的價格 就是 商品的小計②注意1: 只能增加本商品的小計, 就是當前商品的小計模塊(p-sum) ③修改普通元素的內容是text() 方法④注意2: 當前商品的價格,要把¥符號去掉再相乘 截取字符串 substr(1)⑤parents(‘選擇器’) 可以返回指定祖先元素 ⑥最后計算的結果如果想要保留2位小數 通過 toFixed(2) 方法⑦用戶也可以直接修改表單里面的值,同樣要計算小計。 用表單change事件⑧用最新的表單內的值 乘以 單價即可 但是還是當前商品小計點擊獲取單價和數量相乘的結果保存給小計既可用戶直接輸入數字問題
parents
<body><div class="c1"><div class="c2"><div class="c3"><div class="c4">哇哈哈</div></div></div></div><script type="text/javascript">// parentsconsole.log( $('.c4').parents('.c1') );</script></body>
jQuery 元素操作
主要是遍歷、創建、添加、刪除元素操作。
遍歷元素
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() ⑥要注意普通元素里面的內容要去掉¥并且轉換為數字型才能相加多次需要求總計,所有封裝函數最為合適
創建元素
語法:$(’’
- ’’);
添加元素
內部添加
element.append(’‘內容’’) [把內容放入匹配元素內部最后面,類似原生 appendChild
element.prepend(’‘內容’’) 把內容放入匹配元素內部最前面。
外部添加
element.after(’‘內容’’) // 把內容放入目標元素后面
element.before(’‘內容’’) // 把內容放入目標元素前面
①內部添加元素,生成之后,它們是父子關系。②外部添加元素,生成之后,他們是兄弟關系。
刪除元素
element.remove() // 刪除匹配的元素(本身)[元素就不在了]
element.empty() // 刪除匹配的元素集合中所有的子節點[內容刪除,元素依舊存在]
element.html(’’’’) // 清空匹配的元素內容
①remove 刪除元素本身。②empt() 和 html('''') 作用等價,都可以刪除元素里面的內容,只不過 html 還可以設置內容。
**案例:購物車案例模塊-**刪除商品模塊
①核心思路:把商品remove() 刪除元素即可②有三個地方需要刪除: 1. 商品后面的刪除按鈕 2. 刪除選中的商品 3. 清理購物車③商品后面的刪除按鈕: 一定是刪除當前的商品,所以從 $(this) 出發④刪除選中的商品: 先判斷小的復選框按鈕是否選中狀態,如果是選中,則刪除對應的商品⑤清理購物車: 則是把所有的商品全部刪掉
**案例:購物車案例模塊-**選中商品添加背景
①核心思路:選中的商品添加背景,不選中移除背景即可②全選按鈕點擊:如果全選是選中的,則所有的商品添加背景,否則移除背景③小的復選框點擊: 如果是選中狀態,則當前商品添加背景,否則移除背景④這個背景,可以通過類名修改,添加類和刪除類
上午回顧:
? parents:獲取所有上級元素
? jQuery元素操作:
? 遍歷元素:
? $(元素).each(function (index, elm) {注意:elm是DOM對象});
? $.each(對象,function (index, elm) {});
? 創建元素:$(‘
- 新的元素
- ’);
? 添加元素:
? 內部添加:append,appendTo,prepend,prependTo
? 外部添加:after,before
? 刪除元素:remove,empty,html(’’);
jQuery 尺寸、位置操作
jQuery 尺寸
width()、height()【只算width和height】
innerWidth()、innerHeight()【包含padding+width】
outerWidth()、outerHeight()【包含padding、border、width】
outerWidth(true)、outerHeight(true)【包含padding、border、margin、width】
以上參數為空,則是獲取相應值,返回的是數字型。 如果參數為數字,則是修改相應值。 參數可以不必寫單位。<style type="text/css">div {width : 100px;height: 100px;background: red;margin: 10px;padding: 10px;border:10px solid blue;}</style> </head> <body><input type="button" value="點擊"><div></div><script type="text/javascript">$('input').click(function () {// var w = $('div').width();// var h = $('div').height();// console.log(w,h);// 設置// $('div').width(200);// var w = $('div').innerWidth();// var h = $('div').innerHeight();// console.log(w,h);// $('div').innerWidth(200);// var w = $('div').outerWidth();// var h = $('div').outerHeight()// console.log(w, h);// $('div').outerWidth(200);// var w = $('div').outerWidth(true);// var h = $('div').outerHeight(true);// console.log(w,h);// $('div').outerWidth(200,true);});</script>
jQuery 位置
位置主要有三個: offset()、position()、scrollTop()/scrollLeft();
offset:獲取元素相對于文檔偏移量(獲取的是對象),可以設置
position:獲取元素相對于定位父的偏移量(獲取的是對象),不可以設置
offset()設置或獲取元素偏移
①offset() 方法設置或返回被選元素相對于**文檔**的偏移坐標,跟父級沒有關系。 $(元素).offset(); ②該方法有2個屬性 left、top 。offset().top 用于獲取距離文檔頂部的距離,offset().left 用于獲取距離文檔左側的距離。③可以設置元素的偏移:offset({ top: 10, left: 30 });// 獲取son的位置// offset:獲取元素距離文檔的位置,返回是對象// 如果只想獲取其中某一個值,那么我們offset().top// console.log( $('.son').offset() );$('.son').offset({top : 200,left : 300});
position() 獲取元素偏移**
①position() 方法用于返回被選元素相對于**帶有定位的父級**偏移坐標,如果父級都沒有定位,則以文檔為準。 $('元素').position()②該方法有2個屬性 left、top。position().top 用于獲取距離定位父級頂部的距離,position().left 用于獲取距離定位父級左側的距離。注意:該方法只能獲取。// 獲取元素距離定位父的偏移位置// console.log( $('.son').position().left );// 注意:offset是可以設置,而position是不可以設置$('.son').position({left : 20,top : 20});
scrollTop()、scrollLeft()設置或獲取元素被卷去的頭部和左側
①scrollTop() 方法設置或返回被選元素被卷去的頭部。
②不跟參數是獲取,參數為不帶單位的數字則是設置被卷去的頭部。
scroll事件:滾動事件,(誰有滾動條加給誰)
$('div').scroll(function () {// console.log(123);console.log( $('div').scrollTop() );});$('input').click(function () {// $('div').scrollTop(0);$('div').animate({scrollTop : 0}, 3000);});
案例帶有動畫的返回頂部
①核心原理: 使用animate動畫返回頂部。②animate動畫函數里面有個scrollTop 屬性,可以設置位置③但是是元素做動畫,因此$(“body,html”).animate({scrollTop: 0})
案例:品優購電梯導航
①當我們滾動到 今日推薦 模塊,就讓電梯導航顯示出來②點擊電梯導航頁面可以滾動到相應內容區域③核心算法:因為電梯導航模塊和內容區模塊一一對應的④當我們點擊電梯導航某個小模塊,就可以拿到當前小模塊的索引號⑤就可以把animate要移動的距離求出來:當前索引號內容區模塊它的offset().top⑥然后執行動畫即可
第二部分:①當我們點擊電梯導航某個小li, 當前小li 添加current類,兄弟移除類名②當我們頁面滾動到內容區域某個模塊, 左側電梯導航,相對應的小li模塊,也會添加current類, 兄弟移除current類。③觸發的事件是頁面滾動,因此這個功能要寫到頁面滾動事件里面。④需要用到each,遍歷內容區域大模塊。 each里面能拿到內容區域每一個模塊元素和索引號⑤判斷的條件: 被卷去的頭部 大于等于 內容區域里面每個模塊的offset().top⑥就利用這個索引號找到相應的電梯導航小li添加類。
課程回顧:
? parents:獲取所有上級元素
? 元素操作:
? 遍歷元素:
? 1、$(元素).each(function (index(索引), elm(元素)) {})
? 2、$.each(對象,function (index(索引), elm(元素)) {})
? 創建元素:
$ ('<li>新的元素</li>');
? 添加元素:
? 內部添加:
append (在父元素內最上方), appendTo(在父元素內最下方), prepend(在父元素外最上方), prependTo(在父元素外最下方)
? 外部添加:after(下),before(上)
? jQuery尺寸:width,innerWidth,outerWidth,outerWidth(true)
<script>$(function() {// 1. width() / height() 獲取設置元素 width和height大小 console.log($("div").width());// $("div").width(300);// 2. innerWidth() / innerHeight() 獲取設置元素 width和height + padding 大小 console.log($("div").innerWidth());// 3. outerWidth() / outerHeight() 獲取設置元素 width和height + padding + border 大小 console.log($("div").outerWidth());// 4. outerWidth(true) / outerHeight(true) 獲取設置 width和height + padding + border + marginconsole.log($("div").outerWidth(true));})</script>
? jQuery位置:
? 偏移位置:offset,position
<script>$(function() {// 1. 獲取設置距離文檔的位置(偏移) offsetconsole.log($(".son").offset());console.log($(".son").offset().top);// $(".son").offset({// top: 200,// left: 200// });// 2. 獲取距離帶有定位父級位置(偏移) position 如果沒有帶有定位的父級,則以文檔為準// 這個方法只能獲取不能設置偏移console.log($(".son").position());// $(".son").position({// top: 200,// left: 200// });})</script>
? 卷起距離:scrollTop,卷起頂部距離
<!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="jquery.min.js"></script> </head><body><div class="back">返回頂部</div><div class="container"></div><script>$(function() {$(document).scrollTop(100);// 被卷去的頭部 scrollTop() / 被卷去的左側 scrollLeft()// 頁面滾動事件var boxTop = $(".container").offset().top;$(window).scroll(function() {// console.log(11);console.log($(document).scrollTop());if ($(document).scrollTop() >= boxTop) {$(".back").fadeIn();} else {$(".back").fadeOut();}});// 返回頂部$(".back").click(function() {// $(document).scrollTop(0);$("body, html").stop().animate({scrollTop: 0});// $(document).stop().animate({// scrollTop: 0// }); 不能是文檔而是 html和body元素做動畫})})</script> </body></html>