芹菜是一根葱
专业解决各种前端Bug,吊打各种面试官

功能: 实现文字字幕 公告内容 自动横向滚动

思路:运用滚动条和计时器

效果:

示例:

如果是动态数据,就要复制一遍 template 中 data1 的数据放 data2 这里,当数据发生改变时 data2 的数据也能实时更新。如果是静态数字可以在方法里面复制或innerHTML赋值
content中的长度大于 header 才会有滚动效果
<template>
  <div class="hello">
    <div class="header">
      <div class="content">
        <div class="data1">
          <span>世界很美</span>
          <span>你也很美</span>
          <span>天气很好</span>
          <span>你也很好</span>
        </div>
        <div class="data2">
          <span>世界很美</span>
          <span>你也很美</span>
          <span>天气很好</span>
          <span>你也很好</span>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  data(){
    return{
      timer:null,//定时器
    }
  },
  methods:{
    scrollMove(){
      var header = document.querySelector('.header')//获取元素
      var data1 = document.querySelector('.data1')
      // var data2 = document.querySelector('.data2')//如果data1里面是静态数据可以直接如此操作。
      // data2.innerHTML = data1.innerHTML;
      this.timer = setInterval(() => {
        header.scrollLeft++;
        if(header.scrollLeft >= data1.clientWidth){
          header.scrollLeft = 0;
        }
      }, 50);
    }
  },
  mounted(){
    this.scrollMove()//挂载
  },
  destroyed(){
    clearInterval(this.timer)//销毁定时器
  },
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>
<style lang="less" scoped>
.header{
  margin: auto;
  width: 200px;
  height: 40px;
  line-height: 40px;
  overflow: hidden;
  background-color: cornflowerblue;
}
.content{
  width: 1200px;
  overflow: hidden;
}
.data1,.data2{
  // display: inline-block;  行内块或浮动让两个div在同一行上
  padding-right: 25px;
  float: left;
}
</style>

  

posted on 2023-01-13 16:27  芹菜是一根葱  阅读(255)  评论(0编辑  收藏  举报