欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

組件說(shuō)明

組件名:<tag-autoflow />

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

源代碼在此

簡(jiǎn)單的使用例子

export default {
    data() {
        // 隨機(jī)生成20個(gè)測(cè)試數(shù)據(jù)
        const num = 20;
        var list = new Array(num).fill(0).map((v, i) => {
            return this.createItem(i);
        })
        return {
            list,
        }
    },
    // 直接用render函數(shù)來(lái)寫(xiě),因?yàn)槲矣X(jué)得這樣寫(xiě)props更直觀一點(diǎn)
    render(h){
        return h('tag-autoflow', {
            props:{
                // 設(shè)置列數(shù)量
                column_size:3,
                // 數(shù)據(jù)源
                data: this.list,
                // 渲染item的方法,參數(shù)目前提供三個(gè)
                // h 瀑布流組件的createElement方法,非父組件的
                // item 要渲染的元素對(duì)象
                // next 必須主動(dòng)調(diào)用next,插件才會(huì)自動(dòng)去渲染下一個(gè)元素,詳細(xì)說(shuō)明見(jiàn)下文
                renderItem(h, item, next){
                    // 簡(jiǎn)單的渲染一個(gè)img跟一個(gè)p標(biāo)簽
                    // 因?yàn)閕mg標(biāo)簽的圖片加載需要時(shí)間,而圖片影響了計(jì)算所在列的高度
                    // 所以需要在img觸發(fā)了load事件后,再去調(diào)用next渲染下一個(gè)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個(gè)元素,頁(yè)面渲染的時(shí)候,很明顯的能看出來(lái)是在一個(gè)img觸發(fā)了load事件之后才渲染下一個(gè)元素。
如果花點(diǎn)心思加一些動(dòng)畫(huà)效果應(yīng)該很酷吧。

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

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

瀑布流的流程說(shuō)明

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

TODO

  • 瀑布流還有個(gè)常見(jiàn)的功能就是滾動(dòng)加載了,目前尚未加入此功能,會(huì)盡快加上。
  • 元素加載的過(guò)渡動(dòng)畫(huà)

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

相關(guān)文章

  • vue導(dǎo)入excel文件,vue導(dǎo)入多個(gè)sheets的方式

    vue導(dǎo)入excel文件,vue導(dǎo)入多個(gè)sheets的方式

    這篇文章主要介紹了vue導(dǎo)入excel文件,vue導(dǎo)入多個(gè)sheets的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue.js實(shí)現(xiàn)開(kāi)發(fā)購(gòu)物車(chē)功能的方法詳解

    Vue.js實(shí)現(xiàn)開(kāi)發(fā)購(gòu)物車(chē)功能的方法詳解

    這篇文章主要介紹了Vue.js實(shí)現(xiàn)開(kāi)發(fā)購(gòu)物車(chē)功能的方法,結(jié)合實(shí)例形式分析了基于vue.js開(kāi)發(fā)的購(gòu)物車(chē)功能相關(guān)操作步驟與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • Vue3中的常見(jiàn)組件通信之mitt使用詳解

    Vue3中的常見(jiàn)組件通信之mitt使用詳解

    這篇文章主要介紹了Vue3中的常見(jiàn)組件通信之mitt使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue中實(shí)現(xiàn)圖片壓縮 file文件的方法

    vue中實(shí)現(xiàn)圖片壓縮 file文件的方法

    這篇文章主要介紹了vue中實(shí)現(xiàn)圖片壓縮 file文件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 基于Vue3實(shí)現(xiàn)視頻播放與截圖功能

    基于Vue3實(shí)現(xiàn)視頻播放與截圖功能

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Vue3實(shí)現(xiàn)簡(jiǎn)單的視頻播放與截圖功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 詳解vue-cli快速構(gòu)建vue應(yīng)用并實(shí)現(xiàn)webpack打包

    詳解vue-cli快速構(gòu)建vue應(yīng)用并實(shí)現(xiàn)webpack打包

    這篇文章主要介紹了詳解vue-cli快速構(gòu)建vue應(yīng)用并實(shí)現(xiàn)webpack打包,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Vue3中實(shí)現(xiàn)發(fā)送網(wǎng)絡(luò)請(qǐng)求功能(最新推薦)

    Vue3中實(shí)現(xiàn)發(fā)送網(wǎng)絡(luò)請(qǐng)求功能(最新推薦)

    Axios是一個(gè)基于Promise的HTTP客戶端,可以在瀏覽器和Node.js中用于發(fā)送HTTP請(qǐng)求,本文主要介紹在Vue3中實(shí)現(xiàn)發(fā)送網(wǎng)絡(luò)請(qǐng)求功能,感興趣的朋友一起看看吧
    2023-12-12
  • Vue權(quán)限指令控制權(quán)限詳解

    Vue權(quán)限指令控制權(quán)限詳解

    因?yàn)轫?xiàng)目中需要根據(jù)后端返回的權(quán)限進(jìn)行功能的顯示隱藏,所以就加了個(gè)權(quán)限指令。不用寫(xiě)if else進(jìn)行判斷,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • 基于vue封裝下拉刷新上拉加載組件

    基于vue封裝下拉刷新上拉加載組件

    這篇文章主要為大家詳細(xì)介紹了基于vue封裝下拉刷新上拉加載組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 解決vue終端報(bào)錯(cuò):不是內(nèi)部或外部命令

    解決vue終端報(bào)錯(cuò):不是內(nèi)部或外部命令

    最近學(xué)習(xí)一下前端框架Vue,整體上感覺(jué)還是比較有意思的,但是在安裝vue-cli腳手架的時(shí)候,出現(xiàn)了一些問(wèn)題,解決問(wèn)題也花費(fèi)了不少時(shí)間,下面這篇文章主要給大家介紹了關(guān)于解決vue終端報(bào)錯(cuò):不是內(nèi)部或外部命令的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評(píng)論