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

詳解vue 自定義marquee無(wú)縫滾動(dòng)組件

 更新時(shí)間:2019年04月09日 11:38:10   作者:站住,別跑  
這篇文章主要介紹了vue自定義marquee無(wú)縫滾動(dòng)組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

先上效果圖:

(1) 看起來(lái)可能有點(diǎn)卡頓,但是實(shí)際上頁(yè)面上看起來(lái)挺順暢的。

(2) 思路就是獲取每一個(gè)列表的寬度,設(shè)置定時(shí)器移動(dòng)列表,當(dāng)移動(dòng)的距離達(dá)到一個(gè)列表的寬度的時(shí)候,把這個(gè)距離放到數(shù)組的最后。這樣就能達(dá)成無(wú)縫循環(huán)滾動(dòng)了。

 大致的情況就是下面這樣:

 

接下來(lái)就是代碼的實(shí)現(xiàn):

index.vue 引入組件

<template>
 <div>
  <marqueeLeft :send-val='send'></marqueeLeft >
 </div>
</template>
<script>
 import marqueeLeft from '../components/marquee'
 export default {
  data:function(){
   return{
    send:[{place: "來(lái)自東莞市的", name: "黃女士"},
   {place: "來(lái)自太原市的", name: "吳先生"},
   {place: "來(lái)自常州市的", name: "戚先生"},
   {place: "來(lái)自金華市的", name: "尤先生"},
   {place: "來(lái)自貴陽(yáng)市的", name: "陳女士"},
   {place: "來(lái)自長(zhǎng)春市的", name: "魏女士"},
   {place: "來(lái)自泉州市的", name: "褚先生"},
   {place: "來(lái)自南昌市的", name: "蔣女士"},
   {place: "來(lái)自南京市的", name: "沈先生"},
   {place: "來(lái)自天津市的", name: "韓先生"},
   {place: "來(lái)自寧波市的", name: "鄒女士"},
   {place: "來(lái)自嘉興市的", name: "周女士"},
   {place: "來(lái)自長(zhǎng)沙市的", name: "秦先生"},
   {place: "來(lái)自濟(jì)南市的", name: "孫女士"},
   {place: "來(lái)自杭州市的", name: "楊先生"}]
   }
  },
  components:{ marqueeLeft },
 }
</script>

marquee.vue 組件頁(yè)面

<template>
 <div class="my-outbox">
  <div class="my-inbox" ref='box'>
   <div class="my-list" v-for="(item,index) in sendVal" :key='index' ref='list'>
    {{item.place}}<span class="my-uname">{{item.name}}</span>剛剛購(gòu)買了產(chǎn)品
   </div>
  </div>
 </div>
</template>

<script>
 export default {
  name:'my-marquee-left',
  props:{  
   sendVal:Array
  },
  data() {
   return {
    nowTime:null,//定時(shí)器標(biāo)識(shí)
    disArr:[],//每一個(gè)內(nèi)容的寬度
   }
  }, 
  mounted:function(){
   var that = this;
   var item = this.$refs.list; 
   var len = this.sendVal.length;
   var arr = [];
   var margin = this.getMargin(item[0]) //因?yàn)樵O(shè)置的margin值一樣,所以取第一個(gè)就行。
   for(var i = 0;i < len;i++){
    arr.push(item[i].clientWidth + margin)//把寬度和 margin 加起來(lái)就是每一個(gè)元素需要移動(dòng)的距離
   }
   this.disArr = arr;
   this.moveLeft();
  },
  beforeDestroy:function(){
   clearInterval(this.nowTime);//頁(yè)面關(guān)閉清除定時(shí)器
   this.nowTime = null;//清除定時(shí)器標(biāo)識(shí)
  },
  methods:{
   //獲取margin屬性
   getMargin:function(obj){
    var marg = window.getComputedStyle(obj,null)['margin-right'];
    marg = marg.replace('px','')
    return Number(marg) //強(qiáng)制轉(zhuǎn)化成數(shù)字
   },
   //移動(dòng)的方法
   moveLeft:function(){
    var outbox = this.$refs.box;
    var that=this;
    var startDis = 0;//初始位置
    this.nowTime = setInterval(function(){
     startDis -= 0.5;
     if(Math.abs(startDis) > Math.abs(that.disArr[0])){
      that.disArr.push(that.disArr.shift())//每次移動(dòng)完一個(gè)元素的距離,就把這個(gè)元素的寬度
      that.sendVal.push(that.sendVal.shift())//每次移動(dòng)完一個(gè)元素的距離,就把列表數(shù)據(jù)的第一項(xiàng)放到最后一項(xiàng)
      startDis = 0;
     }
     outbox.style = 'transform: translateX('+ startDis +'px)'; //每次都讓盒子移動(dòng)指定的距離
    },1000/60)
   }
  }
 }
</script>

<style lang="less" scoped>
 .my-outbox{
  color: #D7BC8D;
  overflow: hidden;
  height: 35px;
  background: #422b02;
  .my-inbox{
   white-space: nowrap;
   .my-list{
    margin-right: 25px;
    display: inline-block;
    font-size: 13px;
    height: 35px;
    line-height: 35px;
    .my-uname{
     color: #FF8900;
    }
   }
  }
 }
</style>

(1) 添加一個(gè)獲取margin的方法,是為了保證如果是使用 rem em 等單位時(shí),margin值不會(huì)出現(xiàn)偏差的情況

(2) 如果引入組件的頁(yè)面中,send-val的值是異步請(qǐng)求的。那么,在marquee.vue組件頁(yè)面,多數(shù)情況會(huì)獲取不了 refs 。這時(shí)候我自己的解決方法是:

<marqueeLeft :send-val='send' v-if='send'></marqueeLeft >

 表示只有當(dāng) send 不為空的時(shí)候才渲染該組件,不過(guò)這種情況會(huì)導(dǎo)致如果 請(qǐng)求響應(yīng)太慢,組件會(huì)一直渲染不出來(lái),就可能會(huì)影響布局。

(3) 如果不想每次都去設(shè)置transform,那么可以把transform放到該元素上,然后修改data中的數(shù)據(jù)就行了,比如:

<div class="my-inbox" :style='transform: translateX('+ cssStyle +'px)'></div>
// 然后在 js 中把 每次移動(dòng)的值,賦值給cssStyle就行了。不過(guò)我感覺這種沒什么區(qū)別

 如果想實(shí)現(xiàn),上下無(wú)縫滾動(dòng),這種效果。思路和左右無(wú)縫滾動(dòng)一樣,基本上只需要把 transform 改成 Y軸移動(dòng) ,每個(gè)列表的寬度改成高度就行了。

不清楚這種方式實(shí)現(xiàn)是否會(huì)有什么問題,F(xiàn)PS一直保持在 接近60左右。暫時(shí)沒發(fā)現(xiàn)什么缺點(diǎn)。。。

以上所述是小編給大家介紹的vue自定義marquee無(wú)縫滾動(dòng)組件詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法

    Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Vue 2.0雙向綁定原理的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Vue中KeepAlive內(nèi)置緩存使用詳解

    Vue中KeepAlive內(nèi)置緩存使用詳解

    KeepAlive 是 vue 中的內(nèi)置組件,當(dāng)多個(gè)組件動(dòng)態(tài)切換時(shí)可以對(duì)實(shí)例狀態(tài)進(jìn)行緩存,本文就來(lái)詳細(xì)的介紹一下Vue中KeepAlive內(nèi)置緩存使用,感興趣的可以了解一下
    2023-10-10
  • Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說(shuō)明

    Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說(shuō)明

    這篇文章主要介紹了Vue中foreach數(shù)組與js中遍歷數(shù)組的寫法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Vue封裝全局toast組件的完整實(shí)例

    Vue封裝全局toast組件的完整實(shí)例

    組件(Component)是 Vue.js 最強(qiáng)大的功能之一,組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼,這篇文章主要給大家介紹了關(guān)于Vue封裝全局toast組件,需要的朋友可以參考下
    2021-07-07
  • Vue3獲取地址欄參數(shù)方法詳解

    Vue3獲取地址欄參數(shù)方法詳解

    Vue3 獲取地址欄參數(shù)有兩個(gè)方式:查詢參數(shù)和路徑參數(shù)。Vue3獲取地址欄參數(shù)是從路由router中獲取,查詢參數(shù)和路徑參數(shù)獲取方式不一樣。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • vue打包并部署到nginx上的實(shí)現(xiàn)示例

    vue打包并部署到nginx上的實(shí)現(xiàn)示例

    本文主要介紹了vue打包并部署到nginx上的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • vue(element ui)el-table樹形表格展示以及數(shù)據(jù)對(duì)齊方式

    vue(element ui)el-table樹形表格展示以及數(shù)據(jù)對(duì)齊方式

    這篇文章主要介紹了vue(element ui)el-table樹形表格展示以及數(shù)據(jù)對(duì)齊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue配置proxy代理接口報(bào)錯(cuò)2007 bad domain的解決

    Vue配置proxy代理接口報(bào)錯(cuò)2007 bad domain的解決

    本文主要介紹了Vue配置proxy代理接口報(bào)錯(cuò)2007 bad domain的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • vite打包靜態(tài)文件打開顯示空白的解決

    vite打包靜態(tài)文件打開顯示空白的解決

    本文主要介紹了vite打包靜態(tài)文件打開顯示空白的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • vue調(diào)用微信JSDK 掃一掃,相冊(cè)等需要注意的事項(xiàng)

    vue調(diào)用微信JSDK 掃一掃,相冊(cè)等需要注意的事項(xiàng)

    這篇文章主要介紹了vue調(diào)用微信JSDK 掃一掃,相冊(cè)等需要注意的事項(xiàng),幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論

泰州市| 喀什市| 昆山市| 正镶白旗| 乌什县| 日土县| 隆昌县| 衡山县| 鸡西市| 会东县| 郎溪县| 龙陵县| 四平市| 雅江县| 新河县| 雷州市| 邮箱| 云梦县| 扶风县| 凉城县| 安庆市| 枣阳市| 临江市| 宝应县| 龙川县| 中方县| 余干县| 谷城县| 池州市| 黄浦区| 桦川县| 河间市| 新乐市| 榆林市| 永州市| 凤城市| 航空| 玛纳斯县| 左贡县| 浙江省| 达州市|