我有一个位置:固定的元素,因此滚动页面我想要的方式。当用户向上滚动时,我希望元素在某一点停止滚动,比如当它距离页面顶部250px时,这可能吗?任何帮助或建议都会有所帮助,谢谢!
我有一种感觉,我需要使用jquery这样做。我尝试获取用户所在位置的滚动或位置但真的很困惑,是否有任何jquery解决方案?
答案 0 :(得分:130)
你的意思是这样吗?
$(window).scroll(function(){
$("#theFixed").css("top", Math.max(0, 250 - $(this).scrollTop()));
});
$(window).scroll(function(){
$("#theFixed").css("top", Math.max(0, 100 - $(this).scrollTop()));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="theFixed" style="position:fixed;top:100px;background-color:red">SOMETHING</div>
<!-- random filler to allow for scrolling -->
STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>STUFF <BR>
答案 1 :(得分:118)
这是我刚刚编写的一个快速jQuery插件,可以满足您的需求:
$.fn.followTo = function (pos) {
var $this = this,
$window = $(window);
$window.scroll(function (e) {
if ($window.scrollTop() > pos) {
$this.css({
position: 'absolute',
top: pos
});
} else {
$this.css({
position: 'fixed',
top: 0
});
}
});
};
$('#yourDiv').followTo(250);
答案 2 :(得分:18)
这是一个完整的jquery插件,可以解决这个问题:
https://github.com/bigspotteddog/ScrollToFixed
此插件的说明如下:
此插件用于将元素固定到页面顶部,如果元素在垂直方向上滚动出视图;但是,它确实允许元素继续向左或向右移动水平滚动。
给定一个marginTop选项,一旦垂直滚动到达目标位置,该元素将停止垂直向上移动;但是,当页面向左或向右滚动时,元素仍将水平移动。页面向下滚动到目标位置后,元素将恢复到页面上的原始位置。
此插件已在Firefox 3/4,Google Chrome 10/11,Safari 5和Internet Explorer 8/9中进行了测试。
针对您的特定情况的用法:
<script src="scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="scripts/jquery-scrolltofixed-min.js" type="text/javascript"></script>
$(document).ready(function() {
$('#mydiv').scrollToFixed({ marginTop: 250 });
});
答案 3 :(得分:6)
詹姆斯·蒙塔涅(James Montagne)在他的回答中可以做他的代码所做的事情,但这会让它在Chrome中闪烁(在V19中测试过)。
你可以解决这个问题,如果你把“margin-top”而不是“top”。不知道为什么它与margin tho一起工作。
$(window).scroll(function(){
$("#theFixed").css("margin-top",Math.max(-250,0-$(this).scrollTop()));
});
答案 4 :(得分:4)
可以使用position: sticky;
答案 5 :(得分:3)
在一个项目中,我实际上在页面加载时将一些标题固定在屏幕底部(它是一个绘图应用程序,因此标题位于底部,以便为宽视口上的canvas元素提供最大空间)。
当滚动到达页脚时,我需要标题变为'绝对',因为我不希望标题超过页脚(标题颜色与页脚背景颜色相同)。
我在这里采用了最早的回复(由Gearge Millo编辑),并且该代码段适用于我的用例。随着一些游戏,我得到了这个工作。现在,一旦到达页脚,固定标题就位于页脚上方。
想到我会分享我的用例以及它是如何工作的,并说声谢谢! 该应用:http://joefalconer.com/web_projects/drawingapp/index.html
/* CSS */
@media screen and (min-width: 1100px) {
#heading {
height: 80px;
width: 100%;
position: absolute; /* heading is 'absolute' on page load. DOESN'T WORK if I have this on 'fixed' */
bottom: 0;
}
}
// jQuery
// Stop the fixed heading from scrolling over the footer
$.fn.followTo = function (pos) {
var $this = this,
$window = $(window);
$window.scroll(function (e) {
if ($window.scrollTop() > pos) {
$this.css( { position: 'absolute', bottom: '-180px' } );
} else {
$this.css( { position: 'fixed', bottom: '0' } );
}
});
};
// This behaviour is only needed for wide view ports
if ( $('#heading').css("position") === "absolute" ) {
$('#heading').followTo(180);
}
答案 6 :(得分:2)
I wrote a blog post about this:
$.fn.myFixture = function (settings) {
return this.each(function () {
// default css declaration
var elem = $(this).css('position', 'fixed');
var setPosition = function () {
var top = 0;
// get no of pixels hidden above the the window
var scrollTop = $(window).scrollTop();
// get elements distance from top of window
var topBuffer = ((settings.topBoundary || 0) - scrollTop);
// update position if required
if (topBuffer >= 0) { top += topBuffer }
elem.css('top', top);
};
$(window).bind('scroll', setPosition);
setPosition();
});
};
答案 7 :(得分:2)
我的解决方案
$(window).scroll(function(){
if($(this).scrollTop()>425) {
$("#theRelative").css("margin-top",$(this).scrollTop()-425);
} else {
$("#theRelative").css("margin-top",$(this).scrollTop()-0);
}
});
});
答案 8 :(得分:0)
使用Mootools框架的解决方案。
http://mootools.net/docs/more/Fx/Fx.Scroll
获取要停止滚动的元素的位置(x&amp; y) 使用$('myElement')。getPosition()。x
$( 'myElement')。为getPosition()。Ý
对于动画类型的滚动使用:
new Fx.Scroll('scrollDivId',{offset:{x:24,y:432}})。toTop();
要立即设置滚动,请使用:
new Fx.Scroll(myElement).set(x,y);
希望这有助于!! :d
答案 9 :(得分:0)
我喜欢这个解决方案
$(window).scroll(function(){
$("#theFixed").css("margin-top",Math.max(-250,0-$(this).scrollTop()));
});
我的问题是我必须处理Adobe Muse中的位置相对容器。
我的解决方案:
$(window).scroll(function(){
if($(this).scrollTop()>425) {
$("#theRelative").css("margin-top",$(this).scrollTop()-425);
}
});
答案 10 :(得分:0)
即兴的mVChr代码
$(".sidebar").css('position', 'fixed')
var windw = this;
$.fn.followTo = function(pos) {
var $this = this,
$window = $(windw);
$window.scroll(function(e) {
if ($window.scrollTop() > pos) {
topPos = pos + $($this).height();
$this.css({
position: 'absolute',
top: topPos
});
} else {
$this.css({
position: 'fixed',
top: 250 //set your value
});
}
});
};
var height = $("body").height() - $("#footer").height() ;
$('.sidebar').followTo(height);
$('.sidebar').scrollTo($('html').offset().top);
答案 11 :(得分:0)
我调整了@ mVchr的答案并将其反转以用于粘性广告定位:如果您需要它绝对定位(滚动),直到标题垃圾关闭屏幕,但之后需要它在屏幕上保持固定/可见:
$.fn.followTo = function (pos) {
var stickyAd = $(this),
theWindow = $(window);
$(window).scroll(function (e) {
if ($(window).scrollTop() > pos) {
stickyAd.css({'position': 'fixed','top': '0'});
} else {
stickyAd.css({'position': 'absolute','top': pos});
}
});
};
$('#sticky-ad').followTo(740);
<强> CSS:强>
#sticky-ad {
float: left;
display: block;
position: absolute;
top: 740px;
left: -664px;
margin-left: 50%;
z-index: 9999;
}
答案 12 :(得分:0)
我喜欢@james的答案,但我正在寻找它的反向,即在页脚之前停止固定位置,这是我想出的
var $fixed_element = $(".some_element")
if($fixed_element.length){
var $offset = $(".footer").position().top,
$wh = $(window).innerHeight(),
$diff = $offset - $wh,
$scrolled = $(window).scrollTop();
$fixed_element.css("bottom", Math.max(0, $scrolled-$diff));
}
所以现在固定元素会在页脚之前停止。并且不会与它重叠。