這篇文章主要給大家介紹了關於ionic3實戰教程之隨機佈局瀑布流的實現方法,文中通過示例代碼和圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面一起學習學習吧。
前言
最近一段時間由於專案需要接觸到了ionic3,發現真是一個利器啊!ionic專案提供了一套豐富的圖標庫,在ionic3中也進行了升級。
公司的一個專案中由於要用到一個瀑布流的特效,找了半天竟然沒有找到相關的資源,沒有辦法,只能迎著頭皮上了~
#話不多說,先上圖
#相信看過圖片的同學都明白什麼意思了吧。對,就是瀑布流!
但是今天我們的瀑布流可不是一般的瀑布流。讓我們接著看:
自動排版
#我們的要求是做那種隨機凌亂的感覺,所以我們需要做一個機制,來將圖片選擇最優的一種排列方式來展示到頁面上,也就是保證圖片與相鄰圖片的比例是最合適的然後在實現排列.
angular4
相信這個效果如果在平常的jq插件中似乎也不難實現,確實,網路上也能搜到一些jq的插件。但是我們的技術堆疊是angular4呀~
在ng中我們的DOM操作基本上都是放在指令中的,相信用過angularjs1.x的同學並不陌生了吧~,在angular4中也是一樣。
好了,讓我們貼程式碼~
#建立指令
我們假設你已經在你的ionic中建立好了相關的元件,並且已經擁有的圖片數據,如果沒有相關基礎的同學建議大家先去看看ionic3 與angular4的入門。
這是我的一個元件html的頁面,也許眼尖的同學已經發現了我們的指令[imagr-sort]="item",對的,我們的指令是需要你目前的圖片的angular資料的。
建立一個指令ts
ionic g directive image-sort
執行建立我們的指令。
建立完了我們的自訂指令就是這個樣子,空空如也啊~
##寫我們的邏輯
1.1接收並且注入一些東西:
看圖!([[imagr-sort]="item"]);那麼我們也當然應該在指令中接收到輸入的資料;如截圖中紅色箭頭所示,我將輸入的資料保存了起來->sourceArr;
1.2實際點!圖片是從異步加載過來的!
我們先思考這樣一個問題:我們的指令是在angular資料渲染的時候就開始執行的,這個是基本大家都懂。 but!我們的圖片可都是非同步載入的呢~,所以自然而然我們要有一個圖片載入的過程:image.onload,不錯,是它~
image.onerror
,這個相信大家也看明白了吧,這個是圖片載入失敗的一個函數,我在裡面做的操作是將載入失敗的圖片從原始的DOM中,angular的數據剔除。
這裡面就用到了我們angular的渲染器this.render2();
相關功能方法大家可以去原始碼裡面看一下,基本上所有常用的Dom操作都有實作。
for循環呢是因為我們的圖片資料是多條的,所以我們要等待每一張圖片都順利的載入完成。
ps:注意在onerror與onload的函數中使用this要在imgOnlod中使用變數參考let _self = this;
圖片載入完成開始我們的改造工程
1.3將我們的適口依照網格劃分
imageStartStort()!
上圖
大家看1圖紅圈內,我是自己劃分出五個橫向網格標準,以便我們待會將圖片比例做對比。
1.4將我們的圖片定義網格佔用
#我們建立了一個陣列allImageArr=[];用於保存目前處理過的所有圖片的資料。
還記的我們之前獲得的angular的資料吧,我們透過循環它來將圖片劃分網格佔用。
我們的循環中都做了些什麼?
1.圖片的寬度而高,並且求出每張圖片的比例。
2.將所得的圖片比列與我們自己定義的網格比例進行區間劃分。
3.按照我們劃分的網格來計算出佔有網格的圖片的新的寬度,所佔網格數儲存並且記錄保存到我們的自定義的allImageArr中,並且在原有的angular資料中加入gridding數字那個記錄對應的網格數。
執行this.pictureColumnSort
方法;
我們的圖片已經分割完成了,接下來,我們來熱情的一刻~
## 1.5圖片排列,跟據網格派選最適合的鄰居~
pictureColumnSort()!上圖
#這一個過程其實也沒啥好說的,主要就是循環,查看每個圖片的網格數,將最合適的進行相鄰排序(執行下一步:goExchange函數),最後匹配不上的單獨做一個5分網格戰術出來.
格式可以是多種:3 2,1 4,1 1 3,1 3 1,2 3.。 。 。 。 。
怎麼高興怎麼來~
沒啥好說的就是循環篩選,大家看看圖就好。
1.6無序變有序,除了交換應該沒有更好的選擇了吧
#goExchange()! 上圖
這個函數中收到的repeatI與repeatA就是1.5中的雙重循環的索引,這個索引決定了我們換圖片的位置。
程式碼所示的原理就是將配對到的圖片換到我們目前圖片的後面,將原來後面的圖片補到換過來圖片的位置,有點繞可能是我的比哦打能力不好,哈哈。
至於中間的調用的過程有一點我要說明:
setTimeout(() => { _self.setHeight(angularImageList, ele); });
整個調用我也是晚班無奈的情況下才使用的,如果不加整個調用在setHeight函數中設置的angular,數據會莫名其妙的出現圖片位置更換錯誤,至今誤解,如果大佬們能看到整個有好的解決方法也分享一下。
上面是我整理給大家的,希望今後對大家有幫助。
相關文章:
#以上是在ionic3中如何實現隨機佈局瀑布流的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

WebStorm Mac版
好用的JavaScript開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器