文字橫向滾動效果,公告效果


因使用ui組件存在一些兼容性問題,故找到以下方法略加改動實現效果

<template>
  <div class="wrap"> // 外框,固定寬度
    <div id="box">  // 內部滾動框
      <div id="marquee">{{text}}</div>  //展示的文字
      <div id="copy"></div>  // 文字副本,為了實現無縫滾動
    </div>
    <div id="node">{{text}}</div> //為了獲取text實際寬度
  </div>
</template>
<script>
export default {
  name: 'Marquee',
  props: ['lists'], // 父組件傳入數據, 數組形式 [ "連雨不知春去","一晴方覺夏深"]
  data () {
    return {
      text: '' // 數組文字轉化后的字符串
    }
  },
  methods: {
    move () {
// 獲取文字text 的計算后寬度  (由於overflow的存在,直接獲取不到,需要獨立的node計算)
      let width = document.getElementById('node').getBoundingClientRect().width 
      let box = document.getElementById('box')
      let copy = document.getElementById('copy')
      copy.innerText = this.text // 文字副本填充
      let distance = 0 // 位移距離
        //設置位移
      setInterval(function () { 
        distance = distance - 1
         // 如果位移超過文字寬度,則回到起點
        if (-distance >= width) {
          distance = 16
        }
        box.style.transform = 'translateX(' + distance + 'px)'
      }, 20)  
    }
  },
// 把父組件傳入的arr轉化成字符串
  mounted: function () {
    for (let i = 0; i < this.lists.length; i++) {
      this.text += ' ' + this.lists[i]
    }
  },
// 更新的時候運動
  updated: function () {
    let times=setTimeout(()=>{
        let wrapw=document.getElementById('wrap').offsetWidth
        let nodew=document.getElementById('node').offsetWidth
        if(wrapw<nodew){  //判斷文字長度大於盒子寬度時,執行滾動
            this.move()
        }
        clearTimeout('times')
    },2000)  //頁面更新2s后執行
  }
}
</script>
<style scoped>
// 限制外框寬度,隱藏多余的部分
.wrap {
  overflow: hidden;
  height:30px;   //設置此兩行代碼可以防止文字錯位
  line-height:30px;
}
// 移動框寬度設置
#box {
  width: 80000%;
}
// 文字一行顯示
#box div {
  float: left;
}
// 設置前后間隔
#marquee {
   margin: 0 16px 0 0;
}
// 獲取寬度的節點,隱藏掉
#node {
  position: absolute;
  z-index: -999;
  top: -999999px;
}
</style>







--全局引入, main.js文件里 
import TextScroll from './components/scroll/textScroll.vue'
Vue.component('TextScroll',TextScroll)


--使用並傳參: <TextScroll :lists="lists"></TextScroll>


--參數:
data (){
  return {
    lists: [
       '連雨不知春去',
       '一晴方覺夏深'
    ]
  }
}

本文轉自:https://www.jianshu.com/p/a9e1cf8efbf3 略作改動


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM