我试图让div在用户向下滚动页面时向上滚动相同数量的像素。例如,在Google Chrome中使用鼠标滚轮时,它会以大约20px的间隔向下滚动。但是当您使用手柄向下滚动时,滚动量会有所不同。
到目前为止,这是我的代码:
var scrollCtr = 50;
$(window).scroll(function(){
scrollCtr = scrollCtr - 20;
$('div.nexus-files').css('margin-top', scrollCtr + 'px');
});
这有一些问题:
这是一个例子: http://www.enflick.com/
感谢您的帮助
答案 0 :(得分:2)
你这样做是错误的,你要做的事情应该在position: fixed
上使用div.nexus-files
完成
div.nexus-files{position: fixed; top: 0;}
但无论如何 - 如果你仍然想知道你可以用滚动事件做什么 - 你最好到文档的scrollTop
并将margin-top
设置为相同的值
window.onscroll = function(event){
var doc = document.documentElement, body = document.body;
var top = (doc && doc.scrollTop || body && body.scrollTop || 0);
document.getElementById('nexus-files_id').style.marginTop = top+'px';
}
我使用纯Javascript而不是jQuery,因为当浏览器需要在很短的时间内(在滚动期间)计算内容时,开销可能是至关重要的。 [通过存储对元素和文档的引用,可以做得更高效......但是你知道......)
我使用基于id的选择器来获取特定元素而不是基于类
我再说一遍 - 这不是你应该怎样做的事情
答案 1 :(得分:1)
为什么不使用实际滚动偏移作为参考或位置?
// or whatever offset you need
var scrollOffset = document.body.scrollTop + 20;
// jQuery
var scrollOffset = $("body").scrollTop() + 20;
答案 2 :(得分:0)
终于明白了
以下是我用来完成任务的代码。
大多数代码来自http://enflick.com,我修改它以适应我个人的情况。
jQuery(window).load(function(){
initParallax();
});
// parallax init
function initParallax(){
var win = jQuery(window);
var wrapper = jQuery('#wrapper');
var bg1 = wrapper.find('.nexus-files');
var koeff = 0.55;
if (bg1.length) {
function refreshPosition(){
var scrolled = win.scrollTop();
var maxOffsetY1 = 450;
var offsetY1 = scrolled * koeff;
var offsetY2 = scrolled * koeff - (maxOffsetY1 * koeff - offsetY1);
if (offsetY1 <= maxOffsetY1 * koeff - offsetY1) {
bg1.css("margin-top", +-offsetY1+"px");
//alert(+-offsetY1+"px");
}
}
refreshPosition();
win.bind('resize scroll', refreshPosition);
}
}