如何使用jqueryscroll事件&;偏移量/位置、css还是javascript?
您是如何在css、javascript或jquery中获得此结果的,还是所有这些的组合: 我曾经问过一个类似的问题,但没有人回答。 有人说,如何使用jqueryscroll事件&;偏移量/位置、css还是javascript?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,您是如何在css、javascript或jquery中获得此结果的,还是所有这些的组合: 我曾经问过一个类似的问题,但没有人回答。 有人说, "Maybe you can use javascript (or bether JQuery) for this. If you use JQuery, you can use the scroll event. If you are scrolling, do a check if it hits the other div. https://a
"Maybe you can use javascript (or bether JQuery) for this.
If you use JQuery, you can use the scroll event. If you are scrolling, do a
check if it hits the other div. https://api.jquery.com/scroll/
Checking the positions of the divs is possible with offset/position.
http://api.jquery.com/offset/ https://api.jquery.com/position/
If you want to change the background, you give the div a background color
that is pink. If it hits then you can add an additional background-image
that has a specific background-position
(http://www.w3schools.com/cssref/pr_background-position.asp xpos ypos).
I don't have tried it yet, but I guess it is possible that way."
所以我的问题是,你会怎样做才能得到这个结果,还是不管用什么方法?我在几个小时的努力后想出了这个办法。做这件事很有趣,所以我和大家分享
$(document).ready(function() {
var initScrollTop = $(window).scrollTop();
$('.div1').css('top', (initScrollTop+100)+"px");
$(window).scroll(function () {
var top = parseInt($('.div1').css('top').split("px")[0]);
// I GIVE A FIXED TOP TO .DIV1
var scrollTop = $(this).scrollTop() + 100;
$('.div1').css('top', scrollTop+"px");
// GETTING SOME VALUES
// DIV1
var div2Top = parseInt($('.div2').css('top').split('px')[0]);
var div2Height = parseInt($('.div2').css('height').split('px')[0]);
var div2Bottom = parseInt($('.div2').css('bottom').split('px')[0]);
// DIV2
var div1Width = parseInt($('.div1').css('width').split('px')[0]);
var div1Height = parseInt($('.div1').css('height').split('px')[0]);
var div1Top = parseInt($('.div1').css('top').split('px')[0]);
var div1Bottom = parseInt($('.div1').css('bottom').split('px')[0]);
var div1Left = parseInt($('.div1').css('left').split('px')[0]);
// WE ARE GOING THROUGH THE GREEN BOX
if(scrollTop + div1Height > div2Top) {
// OUTSIDE OF THE GREEN BOX (.div2)
if(scrollTop + div1Height > div2Height + div2Top) {
var div3Height = div2Top + div2Height - scrollTop;
$('.div3').css('top', scrollTop+ "px")
// .css('bottom', div2Bottom + "px")
.css('width', div1Width + "px")
.css('height', div3Height + "px")
.css('visibility','visible');
console.log("I'm out");
}
// INSIDE OF THE GREEN BOX (.div2)
else {
var div3Height = (div1Top > div2Top) ? div1Height : scrollTop + div1Height - div2Top;
var div3Top = (div1Top > div2Top) ? div1Top : div2Top;
$('.div3').css({
'top' : div3Top + "px",
'left': div1Left + "px",
'width': div1Width + "px",
'height': div3Height + "px",
'visibility':'visible'
});
}
} else {
$('.div3').css('visibility','hidden');
}
// WE ARE ABSOLUTELY OUT OF THE GREEN BOX (FROM THE BOTTOM GOING DOWN)
if(scrollTop > div2Top + div2Height) {
$('.div3').css('visibility','hidden');
}
});
});
这里有一把小提琴,你可以试一试
所以基本上它所做的就是创建三个div,其中两个是可见的,并且相互“碰撞”,另一个开始隐藏,只有当div1
的位置在div2
的范围内时才会显示。此div3
(第三个div)将显示在div1
上(请参见z-index
)。当它完全开箱即用时,div3
将被隐藏
我不知道还有什么要解释的代码,我不知道(我也不认为,我花了一段时间才让它工作起来)它的功能是否可以理解。如果你有什么要问的,我会读的;)
希望它能帮上忙还有一件事,一切都很好,但我只有一个问题。请注意,当div1超过div2时,宽度不会自动调整为div2,如果您从我链接的小提琴中理解我的意思的话。我该如何解决这个问题?所以基本上高度是很大的,我怎样才能得到同样的宽度呢?可能吗?这是因为我将
div3
的宽度调整为div1
的宽度,并且在CSS中您将div1
修改为700px。你可以做两件事:1。将经过的位置更改为div1Width
(并添加div2Width
,因为我没有使用它,所以我没有添加它),或2。在CSS中更改div1
的宽度以匹配div2
的宽度。