HTML(注意包裹關係,方便js呼叫)




















身體>
LESS(少預編譯)
* {
邊距:0;
填充:0;
}
#main {
位置:相對;
}
.box {
內邊距:15px 0 0 15px;
浮動:左;
}
.pic {
內邊距:10px;
邊框:1px 實心 #ccc;
邊框半徑:5px;
盒子陰影:0px 0px 5px #ccc;
圖片{
寬度:165px;
高度:自動;
}
}
JavaScript(自己理解的註解)
(函數有一定瑕疵,僅用於學習理解)
window.onload = function () {
waterfall("main","box");
//呼叫自訂函數;作用於main下的每一個box元素;
var dataInt = { "data":[{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src": "6.jpg"}]}
//模擬json資料;
window.onscroll = function () {
if (checkScrollSlide) {
//呼叫自訂函數;根據函數傳回值決定捲動是否超出範圍;
var oParent = document.getElementById("main");
for (var i = 0; i var oBox = document.createElement("div");
oBox.className = "box";
oParent.appendChild(oBox);
//建立box區塊
var oPic = document.createElement("div");
oPic.className = "pic";
oBox.appendChild(oPic);
//建立pic區塊
var oImg = document.createElement("img");
//建立img元素
oImg.src = "images/" dataInt.data[i].src;
//設定圖片引用;
oPic.appendChild(oImg);
};
waterfall("main","box");
//將動態產生的資料區塊進行串流佈局;
};
};
};
//流式佈局主函數,自動調整資料區塊的位置;
function waterfall (parent,box) {
//將main下的所有box元素取出;"parent"代表父級,box代表box元素;
var oParent = document.getElementById(parent);
//將父級元素賦值給變數oParent;
var oBoxs = getByClass(oParent,box);
//透過自訂函數,取得父級下的每一個box元素;所得到的是所有box元素的集合;
//再次將這個得到的box元素的集合賦值給oBoxs;(因為作用域問題,變數不共用);
// console.log(oBoxs.length);
//在控制台中列印出box元素的數量,用於調試;
var oBoxW = oBoxs[0].offsetWidth;
//計算出每一列的寬度;offsetWidth包含內邊距在內的寬度;
// console.log(oBoxW);測試;
var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
//計算整個頁面顯示的列數(頁面寬度/box的寬度);
oParent.style.cssText = "width:" oBoxW*cols "px;margin:0 auto";
//父元素main的寬度=每一列的寬*列數;並且左右居中;
var hArr = [];
//存放每一列高度的陣列;
for (var i = 0; i //遍歷oBoxs陣列;
if (i
hArr.push(oBoxs[i].offsetHeight);
//求出每一列的高度放入陣列中;
}else{
//這裡的box元素已經不是第一行的元素了;
var minH = Math.min.apply(null,hArr);
//得到第一行的最小高度並賦值給變項;
// console.log(minH);
var index = getMinhIndex(hArr,minH);
//呼叫自訂函數取得此變數的index值;
oBoxs[i].style.position = "absolute";
oBoxs[i].style.top = minH "px";
oBoxs[i].style.left = oBoxW*index "px";
//設定目前元素的位置;
//目前元素的left值=上方的元素的index值*每列的寬度;
//oBoxs[i].style.left = oBoxs[index].offsetLeft "px";
//第二種取得目前元素的left值;
//此時在第index欄位新增了一個box元素;
hArr[index] =oBoxs[i].offsetHeight;
//每一列更新後的高度=每一列原來的高度 後來新增的box元素的高度;
};
};
};
//js原生透過Class取得元素;
function getByClass (parent,claName) {
//透過class取得元素;(在父級parent的容器下取得claName的元素;)
var boxArr = new Array();
//宣告陣列,用來儲存所獲得的所有class為box的元素;
var oElements = parent.getElementsByTagName("*")
//宣告變數用來儲存此父元素下的所有子元素(*);
for (var i = 0; i //遍歷數組oElements;
if (oElements[i].className==claName) {
//如果陣列中的某一個元素的calss類別與參數claName相同;
boxArr.push(oElements[i]);
//則將遍歷到的這個box元素歸類為boxArr陣列;
};
};
return boxArr;
//呼叫陣列後,經過一系列函數,遍歷;將得到的陣列傳回給呼叫的函數;
};
//取得陣列元素的index值;
function getMinhIndex (arr,val) {
//arr是父級數組;val是目前元素;
for(var i in arr){
//從0開始遍歷;
if(arr[i]==val){
//找出目前元素在陣列中對應的index值;
return i;
//函數傳回值即為目前元素的index值;
};
};
};
//偵測是否具備了滾動載入資料區塊的條件;
function checkScrollSlide () {
var oParent = document.getElementById("main");
var oBoxs = getByClass(oParent,"box");
var lastBoxH = oBoxs[oBoxs.length-1].offsetTop Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);
//最後一個box元素距離頁面頂端的高度(找到最後一個box(oBoxs.lenght-1)的offsetTop) 自身的一半;
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
//瀏覽器捲軸滾動的距離;
// console.log(scrollTop);
var height = document.body.clientHeight || document.documentElement.clientHeight;
//瀏覽器視窗的高度;
// console.log(height);
return (lastBoxH
};
總結:
用瀑布流來展現照片再好不過了,下面是瀑布流(每一行的長度等於瀏覽器窗口的長度)的一種實現方式,也可以用css3實現,很簡單,谷歌一下你就知道。
我的思路大概是一張一張的圖片插入,當這一行的圖片保持長寬比例不變並且高度低於250時就完成一個了循環,即這一行插入進去了,。
然後進入下一個迴圈插入下一行。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境