javascript - 永无止境的滚动,两侧克隆元素

标签 javascript jquery html css

我希望能够无休止地滚动两边,这意味着它会在到达终点之前克隆元素。

例子: https://codepen.io/rKaiser/pen/wOGmqN

  $('.timeline-container').on('scroll',function() {
      //columns = innerContent.length * 101; // multiply by column width
      console.log(this.scrollLeft)
      //console.log(columns + ' whole width');

      if (this.scrollLeft < 1000) {
        cloneTimelinesleft();
        console.log('test');
        $(this).off('scroll');

      } else if ( (this.scrollLeft + outerContent.outerWidth()) > (columns - 300)){
        innerContent = $('.timeline-container .timeline-years .year-column');
        columns = innerContent.length * 101; // multiply by column width;
        console.log(columns + ' whole width');
        cloneTimelinesright();
      }    
  });

示例以滚动条为中心开始。所以它应该在到达任一侧之前克隆原始元素。我不确定性能,只克隆而不删除会更好吗?也可能只克隆到接近结束的那一侧。

cloneTimeslinesright() 正在运行 与我想的差不多,

cloneTimelinesleft(); 有一个问题,一旦它克隆,滚动的位置就不会像右侧那样受到影响,因此条件始终保持为真并且垃圾邮件太多克隆。

最佳答案

当您在滚动条位置之后(右侧)追加时,滚动条位置不会改变,并且在当前滚动条位置下方会出现额外的滚动空间。

当您在滚动条位置之前(左侧)添加前缀时,现有内容会被向下推,滚动条会向上移动。

这是标准的浏览器行为,因为从用户体验的 Angular 来看,将内容放在顶部表示信息的重要性更高(例如,最新更新,就像在您的 Facebook 墙上)并且它会取代它下面的内容,而附加到底部表示添加了不太重要的内容,这些内容被上面的内容所取代。

在执行 cloneTimelinesleft() 之后,您可以通过手动向右滚动来覆盖它,宽度等于您添加的内容的宽度

$('body').scrollLeft($(newClonedContent).outerWidth());

关于javascript - 永无止境的滚动,两侧克隆元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54961712/

相关文章:

javascript - 如何从不属于我的 Canvas 中获取像素数据?

javascript - Underscore.js:过滤对象数组,然后按平均值排序?

jquery - 按钮点击声音

javascript - 当文本具有特殊字符时,offsetWidth 无法正确计算

javascript - 有什么方法可以使时间间隔在全日历中不可点击?

php - jQuery 替换

javascript - 一个类的所有链接 - 如何在点击时添加其他类?

javascript - RequireJS 文本插件 - 缩小模板

javascript - CoffeeScript - 使用参数执行 bash 脚本

javascript - 使用 Javascript 将多个图像拼接在一起