【问题标题】:Scroll function executes also when page loads页面加载时也会执行滚动功能
【发布时间】:2016-07-14 06:05:16
【问题描述】:

我做了一个jsfiddle 作为对How to build fullscreen slider like this? 的回答(现在暂停)
我知道滚动太快会出错,并且双向滚动做同样的事情,但我的问题是当页面加载时,它会自动滚动一次
我使用的代码是

var leftImg = document.getElementsByClassName('left');
var rightImg = document.getElementsByClassName('right');
var cur = 0;
for (i=0; i<3; i++){
    leftImg[i].style.zIndex = rightImg[i].style.zIndex = -(i+1);
}

window.onmousewheel = changeImage();

function changeImage() {
  leftImg[cur].style.top= "-100%";
  rightImg[cur].style.top= "100%";
  setTimeout(function(){
    window.onmousewheel = changeImage; 
  leftImg[cur].style.zIndex=rightImg[cur].style.zIndex=-(cur+4);
  leftImg[cur].style.top=rightImg[cur].style.top="0";
  cur++;
  if(cur === 3) {
    cur = 0;
for (i=0; i<3; i++){
    leftImg[i].style.zIndex = rightImg[i].style.zIndex = -(i+1);
}
  }
}, 3000);
  window.onmousewheel = preventDefault;
}  

为什么?

【问题讨论】:

  • 您的要求是什么?
  • 只是想知道为什么页面加载时它会滚动一次

标签: javascript jquery html css events


【解决方案1】:

已编辑 #2

不需要循环也不需要超时

var cur = 2;
var zIndex = -1;

window.onmousewheel = changeImage;
function changeImage() {

    var leftImg = document.getElementsByClassName('left');
    var rightImg = document.getElementsByClassName('right');
    leftImg[cur].style.top = "-100%";
    rightImg[cur].style.top = "100%";
    if (leftImg[(cur + 1) % 3].style.top === "-100%") {
        leftImg[(cur + 1) % 3].style.zIndex = rightImg[(cur + 1) % 3].style.zIndex = (zIndex);
        leftImg[(cur + 1) % 3].style.top = rightImg[(cur + 1) % 3].style.top = "0%";

    }
    zIndex--;
    cur--;
    if (cur === -1) {
        cur = 2;
    }

}

fiddle

【讨论】:

  • 抱歉,还是没有
  • 你用的是什么浏览器
  • 我正在使用 chrome。显然, onmousewheel 不是跨浏览器事件。我现在正在尝试重写函数
  • 我认为您可能仍需要添加 preventDefault();
  • 看起来不错,不过最后一个else 似乎没必要
猜你喜欢
  • 2016-04-03
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2017-01-12
  • 2012-12-18
相关资源
最近更新 更多