【发布时间】:2014-05-06 20:15:55
【问题描述】:
在观看了关于 (here's part two) 的这两个部分的教程后,我已经开始运行视差滚动了。在剪辑开始的地方,他使用Paul Irish's requestAnimationFrame 介绍了跨浏览器兼容性,这就是我无法开始工作的地方。他只是将代码粘贴到代码中并且它可以工作,但我无法让它在除 Chrome 之外的任何其他浏览器中运行。虽然,当粘贴图像时发生了一些事情,所以我想它会做一些事情......
知道我做错了什么吗?一个建议是将 requestAnimationFrame 移到其他代码之前,但这并没有改变任何东西。我已经建立了一个 JSFiddle here 所以请帮助自己。任何指针都有帮助。
这是我的代码:
(function () {
var lastTime = 0;
var vendors = ['webkit', 'moz'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}());
(function ($) {
var $container = $(".parallax");
var $divs = $container.find("div.parallax-background");
var thingBeingScroll = document.body;
var liHeight = $divs.eq(0).closest("li").height();
var diffHeight = $divs.eq(0).height() - liHeight;
var len = $divs.length;
var i, div, li, offset, scroll, top, transform;
var offsets = $divs.get().map(function (div, d) {
return $(div).offset();
});
var render = function () {
top = thingBeingScroll.scrollTop;
for (i = 0; i < len; i++) {
div = $divs[i];
offset = top - offsets[i].top;
scroll = ~~((offset / liHeight * diffHeight) * 3);
transform = 'translate3d(0px,' + scroll + 'px,0px)';
div.style.webkitTransform = transform;
div.style.MozTransform = transform;
div.style.msTransform = transform;
div.style.OTransform = transform;
div.style.transform = transform;
}
};
(function loop() {
requestAnimationFrame(loop);
render();
})();
})(jQuery);
【问题讨论】:
标签: javascript cross-browser scroll parallax requestanimationframe