<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1, 根據 ajax請求的響應體結果 動態渲染生成頁面
請求地址 請求方式 引數鍵名 都是 後端程式定義的
前端 只能根據需求 定義 攜帶的具體的引數資料
響應體資料是後端程式返回的資料結果
只能獲取資料結果 不能修改資料結果
可以根據 響應體資料結果 動態渲染生成頁面內容
可以使用 三元運運算元 給標籤定義屬性等
2, 瀑布流 再次 發起請求的判斷依據
上卷高度 + 視窗視窗高度 + 預留高度 > 最矮ul佔位高度
3, 函數的節流
同時觸發 多次執行 相同的函數程式
只需要觸發執行 第一次 函數程式的呼叫
原理:
執行判斷
當 函數的所有程式都觸發執行結束
變數 賦值原始值 可以再次觸發 新的函數
這裡用某糖網站作為案例,呼叫某糖網站的介面,仿一個簡單的網頁。
程式碼
<!DOCTYPE html> <html lang="en"> <head> <!-- 伺服器載入網路圖片的meta標籤 --> <meta name="referrer" content="never"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .btn { width: 300px; margin: 50px auto; } ul, ol, li { list-style: none; } img { display: block; width: 100%; height: 100%; } a, a:hover, a:active { text-decoration: none; } .box { width: 1200px; margin: 0 auto; } .box::after { display: block; content: ""; clear: both; } .box ul { width: 260px; float: left; margin: 0 20px; } .box ul li { width: 100%; display: flex; flex-direction: column; border: 2px solid #000; margin: 0 0 15px 0; } .box ul li .imgBox { width: 100%; } .box ul li .contentBox { width: 100%; padding: 15px; display: flex; flex-direction: column; justify-content: space-between; } .box ul li .contentBox p { display: flex; justify-content: flex-start; align-items: center; } .box ul li .contentBox p:nth-child(1) { margin: 10px 0; } .box ul li .contentBox p:nth-child(2) { margin: 10px 0; } .box ul li .contentBox p:nth-child(2) span { margin: 0 10px 0 0; } .box ul li .contentBox p:nth-child(2) span i { margin: 0 10px 0 0; } .box ul li .contentBox p:nth-child(3) span:nth-child(1) { display: block; width: 40px; height: 40px; border-radius: 50%; overflow: hidden; margin: 0 10px 0 0; } </style> </head> <body> <div class="btn"> <button>美食菜譜</button> <button>美妝造型</button> <button>家居生活</button> <button>人物明星</button> </div> <!-- div中的內容是 動態生成的 --> <div class="box"></div> <script src="../../ajax.js"></script> <script> // 定義全域性變數 儲存相關的資料資訊 let start; let time; let keyword; // 獲取父級div標籤 const oBox = document.querySelector('.box'); // 定義全域性變數 儲存 要使用的資料 let oUls; let flag = true; // 獲取 所有的button按鈕 const oBtns = document.querySelectorAll('button'); // 迴圈遍歷 給 所有的button標籤 新增 點選事件 oBtns.forEach(item => { item.addEventListener('click', function () { // 預設第一次顯示的是從索引下標是0開始的第一條資料 start = 0; // 獲取關鍵詞 keyword = this.innerHTML; // 向 div標籤中寫入 4個ul空標籤 oBox.innerHTML = "<ul></ul><ul></ul><ul></ul><ul></ul>"; // 獲取 所有的ul標籤物件 oUls = oBox.querySelectorAll('ul'); // 呼叫執行 async await 和 promise執行的 ajax請求 setPage(); }) }) // 定義 頁面捲動監聽事件 window.addEventListener('scroll', function () { // 獲取 佔位資料數值 // 頁面上卷高度 let scrollTop = document.documentElement.scrollTop; // 視窗視窗佔位高度 let winHeight = document.documentElement.clientHeight; // 設定預留高度 let height = 500; // 獲取最矮ul標籤物件 // 迴圈結束 minUl 變數中 儲存 最矮ul標籤物件 let minUl = oUls[0]; for (let i = 0 + 1; i <= oUls.length - 1; i++) { // 如果 minUl 變數中 儲存的 ul標籤 高度 大於 oUls[i]迴圈遍歷的ul標籤的佔位 // 變數minUl 中 儲存 oUls[i] 迴圈遍歷的ul標籤 if (minUl.offsetHeight > oUls[i].offsetHeight) { minUl = oUls[i]; } } // 執行判斷 if (scrollTop + winHeight + height > minUl.offsetHeight) { // 再次發起請求 動態渲染生成新的頁面內容 /* 因為 scroll事件 滑鼠捲動一次 多次觸發 scroll事件 也就是 滑鼠捲動一次 多次觸發執行 setPage() 函數 也就是 滑鼠捲動一次 多次觸發執行 新的 ajax請求 因為 ajax請求是非同步程式 結果就是 多次觸發的ajax請求 執行的是相同的請求引數 獲取的 響應體結果 是 相同的響應體結果 實際專案中 多次請求 只需要執行 第一次請求 */ // 判斷變數儲存的資料 防止多次呼叫函數 if (flag) { flag = false; } else { return; } // 再次呼叫函數 發起新的請求 動態渲染生成新的頁面 setPage(); } }) // 使用 async 定義 非同步請求函數程式 async function setPage() { // 獲取 時間物件 和 時間戳 const t = new Date(); time = t.getTime(); // 發起請求時 根據需求 設定 ajax請求攜帶的引數資料 // response中儲存的是響應體資料 const response = JSON.parse(await myPromiseAjax('/dt', 'get', `include_fields=top_comments%2Cis_root%2Csource_link%2Citem%2Cbuyable%2Croot_id%2Cstatus%2Clike_count%2Csender%2Calbum%2Creply_count&filter_id=${keyword}&start=${start}&_=${time}`)); console.log(response); // 給下一次 請求 賦值起始資料的索引下標 start = response.data.next_start; // 獲取 24條資料的陣列 const arr = response.data.object_list; // 迴圈遍歷 陣列中的24個單元 arr.forEach(item => { // 根據陣列單元的資料 生成 li標籤 let str = ` <li> <div class="imgBox" style="height:${260 * item.photo.height / item.photo.width}px"> <img src="${item.photo.path}" alt=""> </div> <div class="contentBox"> <p>${item.msg}</p> <p> <span style="${item.like_count === 0 ? 'display:none' : ''}"> <i>點贊</i>${item.like_count} </span> <span style="${item.favorite_count === 0 ? 'display:none' : ''}"> <i>收藏</i>${item.favorite_count} </span> </p> <p> <span> <img src="${item.sender.avatar}" alt=""> </span> <span> ${item.sender.username} <br> 釋出到 <a href="JavaScript:;">${item.album.name}</a> </span> </p> </div> </li>`; // 每生成一個li 就要拼接寫入最矮的ul標籤中 // 獲取最矮的ul標籤 let minUl = oUls[0]; for (let i = 0 + 1; i <= oUls.length - 1; i++) { // 如果 minUl 變數中 儲存的 ul標籤 高度 大於 oUls[i]迴圈遍歷的ul標籤的佔位 // 變數minUl 中 儲存 oUls[i] 迴圈遍歷的ul標籤 if (minUl.offsetHeight > oUls[i].offsetHeight) { minUl = oUls[i]; } } // 迴圈結束minUl 中 儲存的是 最矮的ul標籤物件 // 向 最矮的ul標籤中 拼接寫入 li標籤 minUl.innerHTML += str; }) // 當請求執行結束 當新的頁面內容生成完畢 // 可以再次發起新的請求 給 變數賦值原始資料 flag = true; } </script> </body> </html>
ajax程式碼
// 封裝一個promise程式執行 ajax請求 // 引數1 請求的url地址 // 引數2 請求的方式 // 引數3 攜帶的引數怇 function myPromiseAjax( url , type = 'get' , data = '' ){ // 建立一個 promise 物件 const p = new Promise(function( fulfilled , rejected ){ // 執行非同步ajax請求 const xhr = new XMLHttpRequest() ; if( type.toLowerCase() === 'get' ){ // get請求方式 xhr.open( 'get' , `${url}?${data}` ); xhr.send(); }else{ // post請求方式 xhr.open( 'post' , url ); xhr.setRequestHeader('Content-Type' , 'application/x-www-form-urlencoded'); xhr.send(data); } // 接收 請求結果 xhr.onreadystatechange = function(){ // 當 ajax狀態碼是 4 時 判斷 http狀態碼 if( xhr.readyState === 4 ) { // 如果 http狀態碼 是 200 - 299 if( /^2d{2}$/.test( xhr.status ) ){ // 請求成功 fulfilled( xhr.response ); }else if( /^(4|5)d{2}$/.test( xhr.status ) ){ // 請求失敗 rejected( xhr.statusText ); } } } }); // return 返回這個promise物件 return p; }
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45