龙空技术网

记录打造一个类似ElementUI组件库文档的过程:平滑滚动

前端在路上 167

前言:

目前各位老铁们对“elementui 滚动条”大约比较关切,我们都需要剖析一些“elementui 滚动条”的相关资讯。那么小编也在网摘上收集了一些有关“elementui 滚动条””的相关资讯,希望咱们能喜欢,各位老铁们快快来学习一下吧!

要在页面上实现一个滚动展示区,一共有6个卡片,最开始只看到三个

点击卡片下面的向右箭头,卡片向右滚动滚动2个卡片的宽度,直到滚动到最右侧的位置

当然点击向左的箭头,卡片就会向左滚动2个卡片的宽度,直到回到最开始的位置。实现这个效果,需要用到scrollLeft

我们只要在每次点击箭头的时候,卡片滚动区域的scrollLeft加上(减去)我们想要滚动的距离就可以了。

var container = document.getElementById('container');if(direction == 'left'){  element.scrollLeft -= distance;} else {  element.scrollLeft += distance;}

但是,卡片比较宽,一次滚动2个宽度的距离,就会让卡片滚动变成一闪而过,体验效果不是很好。因此,我们要人为地给卡片滚动加上平滑效果,让它匀速缓慢的滚动到指定的位置。这里我们可以借助setInterval(为什么不是setTimeout,大家可以自己试试效果),在一个比较短的时间里,将要滚动的总距离(distance)拆成n份,使得卡片滚动每次加上一小份的距离,知道完成总的滚动距离为止。

var button = document.getElementById('slide');button.onclick = function () {  var container = document.getElementById('container');  scrollAmount = 0;  var slideTimer = setInterval(function () {    container.scrollLeft += 10;    scrollAmount += 10;    if (scrollAmount >= 100) {      window.clearInterval(slideTimer);    }  }, 25);};var back = document.getElementById('slideBack');back.onclick = function () {  var container = document.getElementById('container');  scrollAmount = 0;  var slideTimer = setInterval(function () {    container.scrollLeft -= 10;    scrollAmount += 10;    if (scrollAmount >= 100) {      window.clearInterval(slideTimer);    }  }, 25);};

当然,为了复用性,我们可以将这个抽成一个公共函数,这更符合我们的编程方式。

function sideScroll(element,direction,speed,distance,step){    scrollAmount = 0;    var slideTimer = setInterval(function(){        if(direction == 'left'){            element.scrollLeft -= step;        } else {            element.scrollLeft += step;        }        scrollAmount += step;        if(scrollAmount >= distance){            window.clearInterval(slideTimer);        }    }, speed);}

使用起来也非常简单

var button = document.getElementById('slide');button.onclick = function () {    var container = document.getElementById('container');    sideScroll(container,'right',25,100,10);};var back = document.getElementById('slideBack');back.onclick = function () {    var container = document.getElementById('container');    sideScroll(container,'left',25,100,10);};

到这里,我们已经实现了一个可以平滑滚动的滚动效果了。

标签: #elementui 滚动条