最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue.js實(shí)現(xiàn)一個瀑布流的組件

 更新時間:2023年06月06日 11:59:18   作者:我是好人  
這篇文章主要為大家介紹了vue.js實(shí)現(xiàn)一個瀑布流的組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

我所見過的瀑布流都是固定的幾列,然后每一列包含若干個元素(圖文元素),每一列的總高度都差不多。
所以我這個組件的功能就很簡單,可以設(shè)置列數(shù)量,然后只要再寫一個渲染元素的方法,即可使用。

組件說明

組件名:<tag-autoflow />

參數(shù)名類型說明
dataArray數(shù)據(jù)源
column_sizeNumber列的數(shù)量
renderItemFunction目前只能通過render函數(shù)渲染子元素,還不支持模板。
有三個參數(shù)
h,
item,將被渲染的元素
next,是一個function,在渲染子元素的合適時機(jī)(例如img的onload事件里),調(diào)用next()即可。
如不調(diào)用next將只能渲染一個元素,無法繼續(xù)渲染。

源代碼在此

簡單的使用例子

export default {
    data() {
        // 隨機(jī)生成20個測試數(shù)據(jù)
        const num = 20;
        var list = new Array(num).fill(0).map((v, i) => {
            return this.createItem(i);
        })
        return {
            list,
        }
    },
    // 直接用render函數(shù)來寫,因?yàn)槲矣X得這樣寫props更直觀一點(diǎn)
    render(h){
        return h('tag-autoflow', {
            props:{
                // 設(shè)置列數(shù)量
                column_size:3,
                // 數(shù)據(jù)源
                data: this.list,
                // 渲染item的方法,參數(shù)目前提供三個
                // h 瀑布流組件的createElement方法,非父組件的
                // item 要渲染的元素對象
                // next 必須主動調(diào)用next,插件才會自動去渲染下一個元素,詳細(xì)說明見下文
                renderItem(h, item, next){
                    // 簡單的渲染一個img跟一個p標(biāo)簽
                    // 因?yàn)閕mg標(biāo)簽的圖片加載需要時間,而圖片影響了計算所在列的高度
                    // 所以需要在img觸發(fā)了load事件后,再去調(diào)用next渲染下一個item。
                    return h('div', [
                        h('img', {
                            attrs: {
                                src: item.img
                            },
                            on: {
                                load: e => {
                                    next();
                                }
                            }
                        }),
                        h('p', item.title)
                    ])
                },
            },
        });
    },
    methods:{
        createItem(i) {
            var title = i + ',' + new Array(_.random(10, 150)).fill('哈').join('');
            var img = `http://via.placeholder.com/${_.random(100, 400)}x${_.random(100, 400)}`;
            return {
                img,
                title,
            }
        },
    }
}

渣渣效果圖

代碼里是一次性生成的20個元素,頁面渲染的時候,很明顯的能看出來是在一個img觸發(fā)了load事件之后才渲染下一個元素。
如果花點(diǎn)心思加一些動畫效果應(yīng)該很酷吧。

如果你要渲染的item不包含圖片,純文字的話,可以通過這種寫法調(diào)用next。保證了計算列高度的準(zhǔn)確性。

renderItem(h, item, next){
    this.$nextTick(function(){
        next();
    });
    return h('p', item.title);
},

瀑布流的流程說明

  • 先根據(jù)參數(shù)生成對應(yīng)數(shù)量的列,
  • 判斷data是否有元素,沒有就結(jié)束。
  • 從data里面shift()拿到一個元素item,
  • 找出當(dāng)前高度最小的一列,將item放入該列。
  • 渲染item,然后調(diào)用next()方法進(jìn)入2

TODO

  • 瀑布流還有個常見的功能就是滾動加載了,目前尚未加入此功能,會盡快加上。
  • 元素加載的過渡動畫

以上就是vue.js實(shí)現(xiàn)一個瀑布流的組件的詳細(xì)內(nèi)容,更多關(guān)于vue.js瀑布流組件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue下載blob文檔流實(shí)現(xiàn)過程

    vue下載blob文檔流實(shí)現(xiàn)過程

    文章介紹了兩種在Vue中下載Blob文檔流的常見方法:一種是通過創(chuàng)建a標(biāo)簽并觸發(fā)點(diǎn)擊事件來下載,另一種是使用`file-saver`庫和封裝的`download.js`公用方法來處理文檔流的下載
    2025-12-12
  • vue3如何實(shí)現(xiàn)在style中使用響應(yīng)式變量

    vue3如何實(shí)現(xiàn)在style中使用響應(yīng)式變量

    vue3已經(jīng)內(nèi)置了這個功能啦,可以在style中使用v-bind指令綁定script模塊中的響應(yīng)式變量,這篇文章我們來講講vue是如何實(shí)現(xiàn)在style中使用script模塊中的響應(yīng)式變量,感興趣的朋友一起看看吧
    2024-07-07
  • vue初嘗試--項(xiàng)目結(jié)構(gòu)(推薦)

    vue初嘗試--項(xiàng)目結(jié)構(gòu)(推薦)

    這篇文章主要介紹了vue初嘗試--項(xiàng)目結(jié)構(gòu)的相關(guān)知識,需要的朋友可以參考下
    2018-01-01
  • 解決vue-cli單頁面手機(jī)應(yīng)用input點(diǎn)擊手機(jī)端虛擬鍵盤彈出蓋住input問題

    解決vue-cli單頁面手機(jī)應(yīng)用input點(diǎn)擊手機(jī)端虛擬鍵盤彈出蓋住input問題

    今天小編就為大家分享一篇解決vue-cli單頁面手機(jī)應(yīng)用input點(diǎn)擊手機(jī)端虛擬鍵盤彈出蓋住input問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕)

    VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕)

    本篇文章主要介紹了VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕),具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Vue Router 中meta 對象示例詳解

    Vue Router 中meta 對象示例詳解

    本文主要介紹了在VueRouter中,meta對象的使用和配置方式,meta對象可以包含任何你希望附加到路由的自定義信息,這些配置信息可以靈活的滿足你的應(yīng)用需求,使得路由配置更具靈活性和可擴(kuò)展性
    2024-10-10
  • Vue3中refs使用方法舉例

    Vue3中refs使用方法舉例

    在Vue中Refs是對DOM元素或已安裝到DOM的其他組件實(shí)例的引用,下面這篇文章主要給大家介紹了關(guān)于Vue3中refs使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Vue 打包后相對路徑的引用問題

    Vue 打包后相對路徑的引用問題

    這篇文章主要介紹了VUE 打包后相對路徑的引用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue報錯Error:Cannot?find?module?'fs/promises'的解決方式

    vue報錯Error:Cannot?find?module?'fs/promises'的解決方

    最近的項(xiàng)目需要用到vue/cli,但是用cnpm安裝vue/cli的時候報錯了,下面這篇文章主要給大家介紹了關(guān)于vue報錯Error:Cannot?find?module?'fs/promises'的解決方式,需要的朋友可以參考下
    2022-11-11
  • vue實(shí)現(xiàn)在線翻譯功能

    vue實(shí)現(xiàn)在線翻譯功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)在線翻譯功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

邹平县| 林芝县| 岑巩县| 永城市| 探索| 天镇县| 航空| 灌云县| 武陟县| 金寨县| 密山市| 辽中县| 五台县| 田阳县| 佛冈县| 衡阳县| 唐河县| 廊坊市| 禄丰县| 沅陵县| 台州市| 黔西| 元谋县| 汶川县| 安吉县| 襄垣县| 桐柏县| 伊吾县| 宿松县| 海兴县| 宜阳县| 神池县| 泰宁县| 南宁市| 化隆| 望奎县| 炎陵县| 邻水| 保山市| 呼和浩特市| 长垣县|