内容自动滚动

内容自动滚动,鼠标移入停止滚动,移出之后继续滚动,主要解决echarts滚动问题

html

<div class="chartsbox">
   <div style="height:280px; width:990px; position: absolute;" v-show="loading" v-loading="loading" element-loading-text="加载中" element-loading-background="#293447"></div>
   <div id="firstScrollbox" class="chartboxs" :style="{'visibility':loading==false?'inherit':'hidden'}">
     <div class="echartslist">
       <div class="lineBox" v-for="(rows, index) in zbssqsData" :key="rows.title">
         <p class="chartTitle">{{ rows.title }}</p>
         <div class="chartdiv">
           <!-- 封装的chart组件 -->
           <LineChart></LineChart>
         </div>
       </div>
     </div>
   </div>
 </div>

js部分

// 挂载
onMounted(() => {
  // 设置滚动
  nextTick(()=>{
    const leftchart:any = document.getElementById('firstScrollbox');
    autoScroll(2, 100, 1000, leftchart); // 平滑移动
  })
});

样式

// 更新内容与设置滚动的div区分一下
.chartsbox {
  width: 98%;
  height: 280px;
  .chartboxs { // 滚动div样式
    width: 100%;
    height: 280px;
    margin: 10px 1px 1px 1px;
    overflow-y: scroll;
    position: relative;
  }
  .echartslist{ // 数据刷新的div样式
    width: 100%;
    height: 1450px;
    position: relative;
    display: flex;
    flex-wrap: wrap;
    flex-direction: row;
    justify-content: flex-start;
  }
  .lineBox {
    margin: 10px 20px;
    .chartTitle {
      text-align: center;
      margin: 0px 0px 5px;
    }
  }
}

自动滚动方法


/* div内容上下滚动
* stepLength:一次滚动步长
* speed:滚动速度
* delay:停留时间
* element:Element对象
* element.offsetHeight 元素的像素高度(包括边框和填充)
* element.scrollTop 元素的内容垂直滚动的像素
* element.scrollHeight 元素的高度(包括带滚动条的隐蔽的地方)
*/

function autoScroll(stepLength:number, speed:number, delay:number, element:any) {
  let interval:any;
  element.scrollTop = 10;
  
  function start() {
    interval = setInterval(scrolling, speed)
    element.scrollTop += stepLength
  }
  function scrolling() {
    var sTop = element.scrollTop;
    element.scrollTop += stepLength;
    if (sTop === element.scrollTop || sTop == 0||element.scrollTop === (element.scrollHeight - element.offsetHeight)) {
      stepLength *= -1 // 转换方向
      clearInterval(interval)
      setTimeout(start, delay)
    }
  }
  if (element.offsetHeight !== element.scrollHeight) { // 元素内容没有溢出时,不触发
    setTimeout(start, delay)
  }
  element.addEventListener('mouseover',()=>{
    clearInterval(interval)
  })
  element.addEventListener('mouseleave',()=>{
    start();
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值