搜索
javascript - 新手写了一个简单的轮播碰到一些问题求指导
伊谢尔伦
伊谢尔伦 2017-04-10 16:30:35
[JavaScript讨论组]
function rollAmn() {
    var length = 0
    var oRoll = document.querySelector('.header')

    setInterval(function () {
      if (length == -300) {
        length = 0
        /* 注释一
        oRoll.classList.remove('roll')
        oRoll.style.left = length + '%'
        */
      }
      length += -100
      /* 注释二
      oRoll.classList.add('roll')
      oRoll.style.left = length + '%'
      */
    }, 2000)

  }
  

四张图,第四张和第一张是同一张,想法是if到达第四张时去除transition属性然后left归0回到初始状态,但是貌似是js代码执行过快的原因注释一的代码虽然执行了但接着执行了注释二的代码浏览器直接渲染注释二执行后的状态,于是在到达第四张时下一个动作是直接往左滑动回到{left:-100%}也就是第二张的状态,如果打断点一步步执行时能达成无缝滑动的

于是我就把if的判定放到注释二下面,判定条件改为if(length = -400)但这样第四张图和第一张图都等待了2s,给人造成了一种有一张图等待时间会更长些的错觉,如果每张图等待时间是5s就容易出破绽了

请问这种中间改变样式代码无法被渲染的问题以及多2s等待的问题有什么解决办法吗?

好了大概修改成功过的代码是这样:

function rollAmn() {

    var length = 0
    var oRoll = document.querySelector('.header')
    var nImgLength = -(document.querySelectorAll('.header li').length - 1) * 100

    setInterval(function () {
      length += -100     
      oRoll.style.left = length + '%'

      if (length === nImgLength) {
      
        setTimeout(function () {
          length = 0
          oRoll.classList.remove('roll')
          oRoll.style.left = '0'         
        }, 500)
        
        oRoll.classList.add('roll')

      }

    }, 4000)

  }
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
高洛峰

聪明反被聪明误啊亲,判定条件不变就好了

天蓬老师

推荐给你:http://www.imooc.com/learn/176

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号