首頁 web前端 js教程 在ionic3中如何實現隨機佈局瀑布流

在ionic3中如何實現隨機佈局瀑布流

Jun 14, 2018 pm 05:20 PM
ionic 佈局 瀑布流

這篇文章主要給大家介紹了關於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;

然後我們在angular4中如果要取得到dom宿主的一些屬性了,元素了等等就要用到ElementRef,Renderer2是angular4中的一個類似渲染器的東西吧,這個具體的我還沒搞懂,大家可以多看看這塊的資料,我主要是在這個指令中用於更改Dom的一些結構。

關於我們的imgLength ,我待會再說

1.2實際點!圖片是從異步加載過來的!

我們先思考這樣一個問題:

我們的指令是在angular資料渲染的時候就開始執行的,這個是基本大家都懂。

but!我們的圖片可都是非同步載入的呢~,所以自然而然我們要有一個圖片載入的過程:

嗯,相信各位早就想到了---- >

image.onload,不錯,是它~

也是時候說下之前的imgLength了,這個變數來記錄記載完成的圖片的數量,用來辨別是否當前圖片都已經加載完畢了,為我們後續的動作做依據。

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()! 上圖

看看1.5中的程式碼,我們呢是在每次匹配到了合適的圖片之後執行這個函數,因為我們需要把匹配到的圖片換位置啊!

這個函數中收到的repeatI與repeatA就是1.5中的雙重循環的索引,這個索引決定了我們換圖片的位置。

程式碼所示的原理就是將配對到的圖片換到我們目前圖片的後面,將原來後面的圖片補到換過來圖片的位置,有點繞可能是我的比哦打能力不好,哈哈。

沒啥好說的這個函數,就是換位置。 #########1.7取長補短,完成! #########setHeight()!上圖################再循環(程式碼應該還有不少改進的地步,循環用的不少~) ;######這個地步已經我們呢的佈局頁面完成了,但是我們的圖片的尺寸實際上是不規則的,不忍直視,###所以我們在這個函數中將差異抹平,取長補短。 ######其實我們的圖片一定會有一點拉伸,所以我們也是取了平衡的一個中間點,來進行適當的拉伸。 ######這個函數肯定其實還可以做一些適當的限制來精細化圖片的尺寸調整。至此我們也算是寫完了整個指令邏輯。 ######完成! ioinc serve############

至於中間的調用的過程有一點我要說明:

setTimeout(() => {
  _self.setHeight(angularImageList, ele);
  });
登入後複製

整個調用我也是晚班無奈的情況下才使用的,如果不加整個調用在setHeight函數中設置的angular,數據會莫名其妙的出現圖片位置更換錯誤,至今誤解,如果大佬們能看到整個有好的解決方法也分享一下。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

vue中如何實作methods方法之間呼叫

vux如何實作上拉刷新功能

jQuery如何實作圖片輪播

#

以上是在ionic3中如何實現隨機佈局瀑布流的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1277
29
C# 教程
1257
24
Windows 11: 匯入和匯出開始佈局的簡單方法 Windows 11: 匯入和匯出開始佈局的簡單方法 Aug 22, 2023 am 10:13 AM

在Windows11中,「開始」功能表經過重新設計,並具有一組簡化的應用,這些應用程式排列在頁面網格中,這與它的前身不同,後者在「開始」功能表上有資料夾、應用程式和組。您可以自訂「開始」功能表佈局,並將其匯入並匯出至其他Windows設備,以根據您的喜好進行個人化設定。在本指南中,我們將討論在Windows11上匯入開始佈局以自訂預設佈局的逐步說明。什麼是Windows11中的Import-StartLayout?導入開始佈局是Windows10和更早版本中使用的cmdlet,用於將「開始」功能表的自定

如何在 Windows 11 中儲存桌面圖示位置佈局 如何在 Windows 11 中儲存桌面圖示位置佈局 Aug 23, 2023 pm 09:53 PM

Windows11在使用者體驗方面帶來了很多東西,但迭代並不完全防錯。使用者不時會遇到問題,圖示定位的變更很常見。那麼如何在Windows11中保存桌面佈局呢?該任務有內建和第三方解決方案,無論是保存當前視窗的螢幕解析度還是桌面圖示的排列。對於桌面上有一堆圖示的使用者來說,這一點變得更加重要。繼續閱讀以了解如何在Windows11中儲存桌面圖示位置。為什麼Windows11不儲存圖示佈局位置?以下是Windows11不保存桌面圖示佈局的主要原因:對顯示設定的變更:通常,當您修改顯示設定時,配置的自訂

WordPress網頁錯位現象解決攻略 WordPress網頁錯位現象解決攻略 Mar 05, 2024 pm 01:12 PM

WordPress網頁錯位現象解決攻略在WordPress網站開發中,有時候我們會遇到網頁元素錯位的情況,這可能是由於不同裝置上的螢幕尺寸、瀏覽器相容性或CSS樣式設定不當所致。要解決這種錯位現象,我們需要仔細分析問題、找出可能的原因,並逐步進行除錯和修復。本文將分享一些常見的WordPress網頁錯位問題以及對應的解決攻略,同時提供具體的程式碼範例,幫助開

介紹win7裡的視窗排列方式 介紹win7裡的視窗排列方式 Dec 26, 2023 pm 04:37 PM

當我們同時開啟多個視窗時,win7具有將多個視窗以不同方式排列然後同時顯示的功能,能夠讓我們更清晰地查看到每個視窗的內容。那麼win7窗口排列方式有幾種呢,他們分別都是什麼樣的呢,下面就跟著小編一起來看一下吧。 win7視窗排列方式有幾種答案:三種,分別是層疊視窗、堆疊顯示視窗和並排顯示視窗。當我們開啟多個視窗時,可以右鍵點擊任務欄空白處。就可以看到三種視窗排列方式了。一、層疊視窗:二、堆疊顯示視窗:三、並排顯示視窗:

如何使用HTML和CSS建立響應式輪播圖佈局 如何使用HTML和CSS建立響應式輪播圖佈局 Oct 20, 2023 pm 04:24 PM

如何使用HTML和CSS建立一個響應式輪播圖佈局在現代的網頁設計中,輪播圖是一個常見的元素。它能夠吸引用戶的注意力,展示多個內容或圖片,並且能夠自動切換。在本文中,我們將介紹如何使用HTML和CSS建立一個響應式的輪播圖佈局。首先,我們需要建立一個基本的HTML結構,並且加入所需的CSS樣式。以下是一個簡單的HTML結構:&lt;!DOCTYPEhtml&g

CSS中contain的語法使用場景 CSS中contain的語法使用場景 Feb 21, 2024 pm 02:00 PM

CSS中contain的語法使用場景在CSS中,contain是一個有用的屬性,用於指定元素的內容是否獨立於其外部樣式和佈局。它可以幫助開發者更好地控制頁面佈局和優化效能。本文將介紹contain屬性的語法使用場景,並提供具體的程式碼範例。 contain屬性的語法如下:contain:layout|paint|size|style|'none'|'stric

H5中position屬性的靈活運用技巧 H5中position屬性的靈活運用技巧 Dec 27, 2023 pm 01:05 PM

H5中如何靈活運用position屬性在H5開發中,常會涉及到元素的定位和佈局問題。這時候,CSS的position屬性就會發揮作用。 position屬性可以控制元素在頁面中的定位方式,包括相對定位(relative)、絕對定位(absolute)、固定定位(fixed)和黏附定位(sticky)。本文將詳細介紹在H5開發中如何靈活運用position屬性

如何使用HTML和CSS建立響應式圖片畫廊展示佈局 如何使用HTML和CSS建立響應式圖片畫廊展示佈局 Oct 18, 2023 am 09:40 AM

如何使用HTML和CSS創建一個響應式圖片畫廊展示佈局在當今互聯網時代,圖片畫廊展示是網頁設計中常見的佈局,可以展示各類圖片和圖像作品。為了讓使用者在不同裝​​置上獲得良好的瀏覽體驗,響應式設計變得越來越重要。本文將介紹如何使用HTML和CSS建立響應式圖片圖庫展示佈局,並提供具體的程式碼範例。步驟1:建立基本的HTML結構首先,我們需要建立一個基本的HTM

See all articles