vue-waterfall-easy 2.x
- 這是一個(gè)vue組件烁试,包含瀑布流布局和無限滾動(dòng)加載
- 相比其他實(shí)現(xiàn)方式,無需在返回的數(shù)據(jù)中指定圖片的寬度和高度
- 正是因?yàn)榈?條耳峦,所以采用的是圖片預(yù)加載之后蝶涩,再排版
- 響應(yīng)式没讲,兼容移動(dòng)端
- 支持無圖模式(@2.4.0)
- 使用及其簡單
在線DEMO
Demo案例代碼
更新列表
github
1. 使用
1.1 npm安裝
npm install vue-waterfall-easy --save-dev
1.2 es6語法引用
import vueWaterfallEasy from 'vue-waterfall-easy'
export default {
name: 'app',
components: {
vueWaterfallEasy
}
}
1.3 js引用
<script src="path/to/vue/vue.js"></script>
<script src="path/to/vueWaterfallEasy.js"></script>
new Vue({
el: '#app',
components: {
vueWaterfallEasy
}
})
1.4 支持 require.js sea.js 模塊引用
2. 基本示例
html
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData"></vue-waterfall-easy>
如果imgArr是替換更新轰驳,getData新請(qǐng)求返回的數(shù)據(jù)覆蓋原來的數(shù)據(jù)厚掷。
如果imgArr是增量更新,getData新請(qǐng)求返回的數(shù)據(jù)與原來的數(shù)據(jù)進(jìn)行合并级解,此時(shí)不建議使用替換更新冒黑,會(huì)浪費(fèi)性能。下面這個(gè)例子就是增量更新勤哗。
js
import vueWaterfallEasy from './vue-waterfall-easy/vue-waterfall-easy.vue'
import axios from 'axios'
export default {
name: 'app',
data() {
return {
imgsArr: [],
group: 0, // request param
}
},
components: {
vueWaterfallEasy
},
methods: {
getData() {
axios.get('./static/mock/data.json?group=' + this.group) // 真實(shí)環(huán)境中抡爹,后端會(huì)根據(jù)參數(shù)group返回新的圖片數(shù)組,這里我用一個(gè)驚呆json文件模擬
.then(res => {
this.imgsArr = this.imgsArr.concat(res.data)
this.group++
})
},
},
created() {
this.getData()
}
}
3. 組件參數(shù)
參數(shù) | 類型 | 默認(rèn)值 | 描述 |
---|---|---|---|
width | Number | - | 容器寬度(px)芒划,默認(rèn)是相對(duì)父元素寬度100%冬竟,由于響應(yīng)式,此時(shí)其所有上級(jí)元素寬度必須都是相對(duì)瀏覽器窗口100%民逼,具體看該表格下面實(shí)例泵殴。 如果為定寬的話,必須設(shè)置width值缴挖,而不能只是其父元素設(shè)置定寬 |
height | Number|String | - | 容器高度,值為Number類型時(shí)默認(rèn)單位px,值為String類型時(shí)可指定單位 當(dāng)不傳遞height值時(shí)焚辅,默認(rèn)是相對(duì)父元素高度100%映屋,此時(shí)父元素必須具有高度 |
gap | Number | 20 | 單位:px pc端圖片之間的間距 |
mobileGap | Number | 8 | 單位:px 移動(dòng)端圖片之間的間距 |
imgsArr | Array | [] |
必填 用于渲染瀑布流的數(shù)據(jù) 每個(gè)數(shù)組元素是個(gè)對(duì)象,應(yīng)該要有src和href屬性 src屬性代表圖片的src屬性 href屬性代表點(diǎn)擊跳轉(zhuǎn)的鏈接 如果你的鍵值不是 src 和href 同蜻,你可以使用srcKey 和hrefKey 這兩個(gè)屬性進(jìn)行鍵值裝換
|
srcKey | String | 'src' | 當(dāng)你的圖片地址鍵值不為src 棚点,可以使用該屬性進(jìn)行轉(zhuǎn)換 |
hrefKey | String | 'href' | 當(dāng)你的圖片地址鍵值不為href ,可以使用該屬性進(jìn)行轉(zhuǎn)換 |
imgWidth | Number | 240 | 單位:px 圖片的寬度 |
maxCols | Number | 5 | 瀑布流顯示最大的列數(shù) |
linkRange | String | 'card' | 標(biāo)識(shí)點(diǎn)擊觸發(fā)跳轉(zhuǎn)鏈接范圍湾蔓,值有: 'card' 整張卡牌范圍跳轉(zhuǎn)鏈接 'img' 卡片內(nèi)圖片范圍 custom 自定義可以通過slot插槽自定義跳轉(zhuǎn)鏈接元素 |
isRouterLink | Boolean | false | 值為false時(shí)渲染a標(biāo)簽瘫析,值為true時(shí)渲染router-link組件 |
reachBottomDistance | Number | 0 | 單位:px 滾動(dòng)觸發(fā)scrollReachBottom事件時(shí)的距離容器底部的距離 |
loadingDotCount | Number | 3 | 默認(rèn)loading動(dòng)畫點(diǎn)的數(shù)量 |
loadingDotStyle | Object | null | 默認(rèn)loading動(dòng)畫內(nèi)小圓點(diǎn)的樣式對(duì)象,可以自定義其樣式 |
loadingTimeOut | Number | 500 | 單位:ms 預(yù)加載事件小于500毫秒就不顯示加載動(dòng)畫,增加用戶體驗(yàn) |
cardAnimationClass | String | 'default-card-animation' | 用于給圖片設(shè)置出現(xiàn)時(shí)的動(dòng)畫的calssName贬循,如要去掉默認(rèn)動(dòng)畫可以這樣設(shè)置cardAnimationClass=""
|
enablePullDownEvent | Boolean | false | 開啟下拉事件 |
waterfall組件祖先元素css樣式
html,
body,
#app {
height: 100%; // 父元素必須要有高度
width: 100%; // 如果已經(jīng)是block元素咸包,則可以忽略
}
4. 事件
事件名 | 描述 |
---|---|
scrollReachBottom | 滾動(dòng)條滾動(dòng)到底部時(shí),用于請(qǐng)求新的圖片數(shù)據(jù) |
preloaded | 每次圖片預(yù)加載完成執(zhí)行 |
click | 當(dāng)卡片被點(diǎn)擊時(shí)觸發(fā),看下面的實(shí)例 |
imgError | 圖片加載錯(cuò)誤事件杖虾,第一個(gè)參數(shù)可獲取到當(dāng)前加載錯(cuò)誤圖片的相關(guān)數(shù)據(jù) |
pullDownMove | 移動(dòng)端生效烂瘫,觸摸下拉事件,第一個(gè)參數(shù)可獲取Y軸移動(dòng)距離差奇适,常用于下拉刷新 |
pullDownEnd | 移動(dòng)端生效坟比,觸摸下拉事件手指抬起,常用于下拉刷新 |
click事件使用實(shí)例
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData" @click="clickFn"></vue-waterfall-easy>
clickFn(event, { index, value }) {
// 阻止a標(biāo)簽跳轉(zhuǎn)
event.preventDefault()
// 只有當(dāng)點(diǎn)擊到圖片時(shí)才進(jìn)行操作
if (event.target.tagName.toLowerCase() == 'img') {
console.log('img clicked',index, value)
}
}
5. 組件方法
5.1 waterfallOver
當(dāng)滾動(dòng)加載數(shù)據(jù)結(jié)束時(shí)嚷往,手動(dòng)調(diào)用葛账,將會(huì)取消滾動(dòng)加載
this.$refs.waterfall.waterfallOver()
6. slot插槽
6.1 默認(rèn)slot
進(jìn)行自定義圖片的描述信息
參數(shù)說明
參數(shù) | 描述 |
---|---|
props.index | 圖片在數(shù)組中的索引,從0開始 |
props.value | 遍歷參數(shù)imgsArr的元素值 |
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData">
<div class="img-info" slot-scope="props">
<p class="some-info">第{{props.index+1}}張圖片</p>
<p class="some-info">{{props.value.info}}</p>
</div>
</vue-waterfall-easy>
6.2 slot="loading"
自定義加載動(dòng)畫
<div slot="loading" slot-scope="{isFirstLoad}">
<div slot="loading" v-if="isFirstLoad">first-loading...</div>
<div v-else="v-else">loading...</div>
</div>
6.3 slot="waterfall-head"
容器頭部內(nèi)容插槽
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData">
<div slot="waterfall-head">waterfall-head</div>
</vue-waterfall-easy>
6.4 slot="waterfall-over"
調(diào)用waterfallOver
方法后才會(huì)顯示皮仁,用于瀑布流結(jié)束提醒籍琳,默認(rèn)值是被你看光了
<vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData">
<div slot="waterfall-over">waterfall-over</div>
</vue-waterfall-easy>
7. 兼容移動(dòng)端
別忘記在index.html head中添加一下代碼
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">