我试图模拟Yelp对Mo Map所做的事情。
我知道如果元素到达某个屏幕滚动位置后如何将元素翻转到固定位置,但是一旦它到达相对容器的底部,你如何关闭固定位置?
css sticky position解决了这个问题,但由于它相当新,它没有很好的覆盖范围。
答案 0 :(得分:7)
您可以尝试这样做:little link。
这是JavaScript的注释版本:(注意:这使用jQuery,但没有必要。如果你需要一个普通的JavaScript版本,我很乐意提供一些提示)
var oritop = -100;
$(window).scroll(function() { //on scroll,
var scrollt = window.scrollY; //get the amount of scrolling
var elm = $(".box"); //get the box we want to make sticky
if(oritop < 0) {
oritop= elm.offset().top; //cache the original top offset
}
if(scrollt >= oritop) { //if you scrolled past it,
elm.css({"position": "fixed", "top": 0, "left": 0}); //make it sticky
}
else { //otherwise
elm.css("position", "static"); //reset it to default positioning
}
});
答案 1 :(得分:0)
您可以通过标记所选项目来完成此操作。
滚动时将菜单置于绝对位置并标记所选项目的功能:
jQuery(window).scroll(function () {
console.log(jQuery(window).scrollTop());
// x = jQuery("html").scrollTop();
x = jQuery(window).scrollTop(); // corrigindo bug do chome
/* Item marcado de acordo com a rolagem */
switch (true) {
case (x >= 600 && x < 2500): // ajuste aqui a area
jQuery('.coluna-222-right a').removeClass('ativo');
jQuery('.coluna-222-right a.programacao').addClass('ativo');
break;
case (x >= 2500 && x < 5000):
jQuery('.coluna-222-right a').removeClass('ativo'); // ajuste aqui a area
jQuery('.coluna-222-right a.palestrantes').addClass('ativo');
break;
case (x >= 5000 && x < 5765):
jQuery('.coluna-222-right a').removeClass('ativo'); // ajuste aqui a area
jQuery('.coluna-222-right a.local').addClass('ativo');
break;
}
if (x>40) {
jQuery(".coluna-222-right ul").css("position","absolute");
jQuery(".coluna-222-right ul").css("top",x+20); // ajuste aqui a posição do menu, pode usar - ao invés de +
}
else {
jQuery(".coluna-222-right ul").css("position","static");
jQuery(".coluna-222-right ul").css("top","0");
}
});
检查点击的项目:
jQuery("a").click(function () {
jQuery("a").removeClass("ativo");
jQuery(this).addClass("ativo");
});