账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    无缝轮播滚动,js代码异步,出了点小问题
    • 2018-07-02 00:00
    • 11
    66
    0

    要轮播5张图 ,布置 5->1->2->3->4->5->1 7张图 要实现无缝
    实际思路上就是最后一张滚到第一张实际是顺着滚,动画结束再取消transition切回第一张再附加transition
    现在我遇到这个个问题

    /...5->1执行的代码(有滚动动画).../
         if (newLeft === -3600) { //滚到第7张图时的left,执行回滚
              setTimeout(function () {
                list.style.transition = 'none'; //取消动画
                list.style.left = -600 + 'px'; //瞬间回滚
                list.style.transition = 'left 2s linear';//恢复动画 //但是这句话回滚的时候会生效是为什么
              },2000)
          }
    

    这么写回滚的时候动画会生效
    必须要用下面的写法,第二个计时器必须大于2000几个毫秒才满足需求,
    为什么会发生这种事情,计时器里面回调函数应该是同步的呀, list.style.left = -600 + 'px';不执行完后面应该是不会设置动画的呀?

    if (newLeft === -3600) {
          setTimeout(function () {
            list.style.transition = 'none';
            list.style.left = -600 + 'px';
          },2000)
          setTimeout(function () {
                    list.style.transition = 'left 2s linear';
          },2020)
    }
    

    这里我发现:间隔时间1-4秒基本没用给,间隔10ms偶尔会出现回滚动画,设置20ms基本没问题
    实际上还是刚刚的问题,js是单线程,会阻塞,2000ms执行的代码如果不执行完,2010ms是不会把异步代码拿来执行的,如果执行完了,那么我这个回滚应该是没有动画的。求大神解释一下

    3
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 红妆浓愁忆思牵。 普通会员 1楼

      在实现无缝轮播滚动时,JS异步处理确实可能会出现一些问题。例如,图片加载未完成导致的定位错误、动画卡顿等。下面是一个简单的无缝轮播示例代码,以及可能出现的问题和解决方案:

      ```javascript let index = 0; let timer;

      // 假设images是你的图片元素集合 const images = document.querySelectorAll('.carousel img'); const length = images.length;

      function slide() { // 清除上一次动画 clearTimeout(timer);

      // 将当前图片移出可视区
      images[index].classList.remove('active');
      
      // 更新索引,实现无缝轮播(如果已经是最后一张,则跳转到第一张)
      index = (index + 1) % length;
      
      // 将下一张图片移入可视区
      images[index].classList.add('active');
      
      // 设置定时器,进行下一次轮播
      timer = setTimeout(slide, 2000); // 这里假设轮播间隔为2秒
      

      }

      // 确保所有图片都加载完成后开始轮播 let loadedCount = 0; for(let i = 0; i < length; i++) { images[i].addEventListener('load', function() { loadedCount++; if(loadedCount === length) { slide(); } }); } ```

      在这个例子中,我们通过监听每张图片的load事件来确保所有图片加载完成后再开始轮播,避免了图片未加载完成导致的定位问题。

      如果你遇到的问题不是这个,还请提供更详细的问题描述或代码片段,以便我能更准确地为你提供帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部