vant的picker組件設(shè)置文字超長(zhǎng)滾動(dòng)方式
picker組件設(shè)置文字超長(zhǎng)滾動(dòng)
我們的手機(jī)端使用vant來(lái)做前端UI框架。
今天在使用vant的picker組件時(shí)候,遇到了一個(gè)問(wèn)題。當(dāng)文字過(guò)長(zhǎng)的時(shí)候,vant的處理方式是ellipsis,超長(zhǎng)部分顯示【…】
如果恰好省略號(hào)前邊內(nèi)容相同,用戶就無(wú)法區(qū)分選項(xiàng)了。如圖:
vant沒(méi)有提供滾動(dòng)的實(shí)現(xiàn)方式,所以我們自己兼容實(shí)現(xiàn)一下。
首先,打開(kāi)開(kāi)發(fā)者工具看下dom結(jié)構(gòu)
我的思路是,如果在選中狀態(tài)下,內(nèi)層文字div長(zhǎng)度大于外層的時(shí)候。給內(nèi)層增加一個(gè)滾動(dòng)動(dòng)畫(huà)效果。
實(shí)現(xiàn)如下:
- 重寫(xiě).van-ellipsis兩個(gè)樣式,去掉ellipsis效果和overflow:hidden
- 監(jiān)聽(tīng)picker的change事件
- 在dom渲染結(jié)束之后,獲取.van-picker-column__item–selected并判斷它與內(nèi)部文字的寬度
- 如果內(nèi)部組件寬度大于外部,在添加一個(gè)animation
<template> <div id="app"> <van-picker show-toolbar title="標(biāo)題" :columns="columns" @change="checkScroll" /> </div> </template> <script> export default { name: 'App', data () { return { columns: [{ text: '浙江', children: [{ text: '溫州溫州溫州溫州溫州溫州溫州-杭州', children: [{ text: '西湖區(qū)' }, { text: '余杭區(qū)' }], }, { text: '溫州溫州溫州溫州溫州溫州溫州-溫州', children: [{ text: '鹿城區(qū)' }, { text: '甌海區(qū)' }], }] }] } }, methods: { checkScroll () { this.$nextTick(() => { // 獲取選中元素 let selectedItems = [...document.querySelectorAll('.van-picker-column__item--selected')] selectedItems.forEach(item => { let child = item.querySelector('.van-ellipsis') if (child.offsetWidth > item.offsetWidth) { // 判斷child文字寬度 item.classList.add('scroll') } else { item.classList.remove('scroll') } }) }) } } } </script>
<style lang="less" scoped> /deep/ .van-picker-column__item--selected { /* 重寫(xiě)選中后的效果 */ .van-ellipsis { text-overflow: unset; overflow: visible; } /* 增加scroll類 */ &.scroll > .van-ellipsis { animation: move 4s linear infinite; } } @keyframes move { 0% { transform: translateX(100%); } 100% { transform: translateX(-100%); } } </style>
這樣,當(dāng)滾動(dòng)picker選中文字超長(zhǎng)的時(shí)候,選中項(xiàng)就會(huì)出現(xiàn)滾動(dòng)效果。
vant_picker_選擇器(搭配彈出層使用)
<van-field readonly clickable label="城市" :value="value" placeholder="選擇城市" @click="showPicker = true" /> <van-popup v-model="showPicker" round position="bottom"> <van-picker show-toolbar :columns="columns" value-key="name" @cancel="showPicker = false" @confirm="onConfirm" /> </van-popup> <!-- 重點(diǎn):自定義value-key屬性:默認(rèn)值是text value-key這個(gè)屬性是自定義后臺(tái)返回字段作為選擇器顯示的內(nèi)容,這樣后臺(tái)返回的字段位未name時(shí),也可以顯示了。 否則默認(rèn)的原始對(duì)象默認(rèn)是[{text:'選項(xiàng)一',value:'1'},{text:'選項(xiàng)二',value:'2'}] -->
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue+layui實(shí)現(xiàn)select動(dòng)態(tài)加載后臺(tái)數(shù)據(jù)的例子
今天小編就為大家分享一篇vue+layui實(shí)現(xiàn)select動(dòng)態(tài)加載后臺(tái)數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09vue如何使用媒體查詢實(shí)現(xiàn)響應(yīng)式
這篇文章主要介紹了vue如何使用媒體查詢實(shí)現(xiàn)響應(yīng)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09VUE登錄注冊(cè)頁(yè)面完整代碼(直接復(fù)制)
這篇文章主要給大家介紹了關(guān)于VUE登錄注冊(cè)頁(yè)面的相關(guān)資料,在Vue中可以使用組件來(lái)構(gòu)建登錄注冊(cè)頁(yè)面,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12axios上傳文件錯(cuò)誤:Current?request?is?not?a?multipart?request
最近工作中使用vue上傳文件的時(shí)候遇到了個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于axios上傳文件錯(cuò)誤:Current?request?is?not?a?multipart?request解決的相關(guān)資料,需要的朋友可以參考下2023-01-01vue中使用swiper,左右箭頭點(diǎn)擊沒(méi)有效果問(wèn)題及解決
這篇文章主要介紹了vue中使用swiper,左右箭頭點(diǎn)擊沒(méi)有效果問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05vue3.0父子傳參,子修改父數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了vue3.0父子傳參,子修改父數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue使用swiper的時(shí)候第二輪事件不會(huì)觸發(fā)問(wèn)題
這篇文章主要介紹了vue使用swiper的時(shí)候第二輪事件不會(huì)觸發(fā)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue-quill-editor+plupload富文本編輯器實(shí)例詳解
這篇文章主要介紹了vue-quill-editor+plupload富文本編輯器實(shí)例詳解,需要的朋友可以參考下2018-10-10