<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Ionic3實現圖片瀑布流布局

        來源:懂視網 責編:小采 時間:2020-11-27 22:33:10
        文檔

        Ionic3實現圖片瀑布流布局

        Ionic3實現圖片瀑布流布局:瀑布流布局是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。 瀑布流布局一般使用在網頁中,在移動端用的比較少但是也不可缺。下面就介紹一下如何在ionic3中使用瀑布流布
        推薦度:
        導讀Ionic3實現圖片瀑布流布局:瀑布流布局是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。 瀑布流布局一般使用在網頁中,在移動端用的比較少但是也不可缺。下面就介紹一下如何在ionic3中使用瀑布流布

        瀑布流布局是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。

        瀑布流布局一般使用在網頁中,在移動端用的比較少但是也不可缺。下面就介紹一下如何在ionic3中使用瀑布流布局。

        首先創建一個項目,這里不多做介紹。我們用about這個模塊來進行瀑布流的開發。

        這里先介紹一下實現的流程:

        我們先要定義一個container,在container中存在有多個box,box里面放置圖片。

        1、首先獲取container中的所有box。

        2、獲取box的寬度和屏幕的寬度。

        3、獲取在當前屏幕寬度下一行可以放置多少個box。

        4、將所有的box的高度放到一個數組當中。

        5、遍歷數組,獲取到第一行中最高度最小的box。

        6、遍歷數組的下標到達第二行的時候將第二排的首元素放在第一行的高度最低的元素下面。(比如一行放了三個box,其中第三個高度最低,那么第四個就放在第三個box的下面。)

        7、將元素放在最低元素下面后,則將第三個元素和第四個元素高度相加成為一個新的第三個元素,同樣重復即可實現。

        下面是詳細代碼

        about.html

        <ion-content>
         <div id="container">
         <div class="box" *ngFor="let image of img_data">
         <div class="box_img">
         ![]({{image.src}})
         </div>
         </div>
         </div>
         <ion-infinite-scroll (ionInfinite)="doInfinite($event)">
         <ion-infinite-scroll-content loadingSpinner="circles" loadingText="正在加載...">
         </ion-infinite-scroll-content>
         </ion-infinite-scroll>
        </ion-content>
        

        about.scss

        page-about {
         ion-content {
         #container {
         position: relative;
         .box {
         padding: 5px;
         float: left;
         .box_img {
         padding: 5px;
         border: 1px solid #cccccc;
         box-shadow: 0 0 5px #ccc;
         border-radius: 5px;
         img {
         width: 150px!important;
         height: auto;
         }
         }
         }
         }
         }
        }
        

        about.ts

        import { Component } from '@angular/core';
        import { NavController, IonicPage } from 'ionic-angular';
        @IonicPage({
         name: 'about'
        })
        @Component({
         selector: 'page-about',
         templateUrl: 'about.html'
        })
        export class AboutPage {
         img_data = [{
         src: "assets/images/a.jpg"
         }, {
         src: "assets/images/b.jpg"
         }, {
         src: "assets/images/c.jpg"
         }, {
         src: "assets/images/d.jpg"
         }, {
         src: "assets/images/e.jpg"
         }, {
         src: "assets/images/f.jpg"
         }, {
         src: "assets/images/g.jpg"
         }, {
         src: "assets/images/h.jpg"
         }, {
         src: "assets/images/i.jpg"
         }, {
         src: "assets/images/j.jpg"
         }, {
         src: "assets/images/k.jpg"
         }, {
         src: "assets/images/l.jpg"
         }, {
         src: "assets/images/m.jpg"
         }, {
         src: "assets/images/n.jpg"
         }, {
         src: "assets/images/o.jpg"
         }]
         constructor(public navCtrl: NavController) {
        
         }
        
         ngAfterViewInit() {
        
         }
         ionViewWillEnter() {
         this.getNode();
         }
         getNode() {
         let parentNode = document.getElementById("container");
         let childNodeArray: any = parentNode.getElementsByClassName("box");
         let screenWidth = document.documentElement.clientWidth;
         let childWidth = childNodeArray[0].offsetWidth;
         let num = Math.floor(screenWidth / childWidth); //獲得一排擺的個數 用Math.floor()轉換為整數
         parentNode.style.cssText = "width:" + childWidth * num + "px; margin:0 auto"; //固定container的寬并設置居中
         this.setImagePosition(num, childNodeArray);
         }
        
         setImagePosition(num, childArray) {
         var imgHeightArray = [];//定義數組用于存放所有圖片的高度
         for (var i = 0; i < childArray.length; i++) { //遍歷所有圖片
         if (i < num) {
         imgHeightArray[i] = childArray[i].offsetHeight; //取得第一排圖片的高度
         } else {
         var minHeight = Math.min.apply(null, imgHeightArray); //獲取第一排圖片中高度最小的圖片
         var minIndex = this.getMinHeight(imgHeightArray, minHeight); //函數獲得高度最小的圖片的位置
         childArray[i].style.position = "absolute"; //絕對定位圖片
         childArray[i].style.top = minHeight + "px"; //圖片距頂部像素
         childArray[i].style.left = childArray[minIndex].offsetLeft + "px"; //圖片距左的像素
         imgHeightArray[minIndex] = imgHeightArray[minIndex] + childArray[i].offsetHeight; //將最低高度的box的高度加上它下方的box高度
         }
         }
         }
        
         getMinHeight(imgHeightArray, minHeight) {
         for (var i in imgHeightArray) {
         if (imgHeightArray[i] == minHeight) { //循環所有數組的高度 讓它等于最小圖片的高度 返回i值
         return i;
         }
         }
         }
        //這里是借助ionic的上拉加載代替網頁的滾動監聽實現加載更多
         doInfinite(infiniteScroll) {
         let parentNode = document.getElementById("container");
         for (var i = 0; i < this.img_data.length; i++) {
         let divNode = document.createElement("div"); //創建div節點
         divNode.className = "box";//為節點添加box類名
         parentNode.appendChild(divNode);//添加根元素
         let subDivNode = document.createElement("div");//創建節點
         subDivNode.className = "box_img";//為節點添加類名
         divNode.appendChild(subDivNode);//添加根元素
         var img = document.createElement("img");//創建節點
         img.src = this.img_data[i].src;//圖片加載路徑
         subDivNode.appendChild(img);//添加根元素
         }
         this.getNode();
         setTimeout(() => { infiniteScroll.complete() }, 1000);
         }
        }
        
        

        最終效果:

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Ionic3實現圖片瀑布流布局

        Ionic3實現圖片瀑布流布局:瀑布流布局是比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數據塊并附加至當前尾部。 瀑布流布局一般使用在網頁中,在移動端用的比較少但是也不可缺。下面就介紹一下如何在ionic3中使用瀑布流布
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲an天堂an在线观看| 日产国产精品亚洲系列| 亚洲人成电影在线天堂| 久久精品中文字幕免费| 亚洲AV无码一区二区乱孑伦AS| 久久最新免费视频| 综合久久久久久中文字幕亚洲国产国产综合一区首| 国产精品国产亚洲区艳妇糸列短篇| 好男人看视频免费2019中文| 亚洲精品乱码久久久久蜜桃| 可以免费观看一级毛片黄a| 激情吃奶吻胸免费视频xxxx| 亚洲一级特黄无码片| 91免费福利视频| 亚洲综合婷婷久久| 最近中文字幕无吗高清免费视频| 亚洲国产高清国产拍精品| 亚洲国产成人爱av在线播放| 两个人看的www高清免费观看| 亚洲色图.com| 日本不卡在线观看免费v| 日本精品久久久久久久久免费| 亚洲午夜未满十八勿入网站2| 在线免费观看国产| 亚洲欧美日韩中文高清www777| 亚洲第一视频在线观看免费| 国产一级黄片儿免费看| 亚洲精品mv在线观看| 日韩精品免费电影| 特级做A爰片毛片免费看无码| 亚洲国产福利精品一区二区| 国产免费久久精品| 91大神免费观看| 自拍偷自拍亚洲精品播放| 亚洲国产精品无码久久SM| 成年女人毛片免费观看97| aa毛片免费全部播放完整| 丁香婷婷亚洲六月综合色| 日韩精品亚洲aⅴ在线影院| 欧美在线看片A免费观看| 久久久久免费视频|