所以基本上我想将这个课从#39;标题中删除。在用户向下滚动一点并添加另一个类以改变它的外观之后。
试图找出最简单的方法,但我无法使其发挥作用。
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll <= 500) {
$(".clearheader").removeClass("clearHeader").addClass("darkHeader");
}
}
CSS
.clearHeader{
height: 200px;
background-color: rgba(107,107,107,0.66);
position: fixed;
top:200;
width: 100%;
}
.darkHeader { height: 100px; }
.wrapper {
height:2000px;
}
HTML
<header class="clearHeader"> </header>
<div class="wrapper"> </div>
我确定我做了一些非常错误的事情。
答案 0 :(得分:152)
$(window).scroll(function() {
var scroll = $(window).scrollTop();
//>=, not <=
if (scroll >= 500) {
//clearHeader, not clearheader - caps H
$(".clearHeader").addClass("darkHeader");
}
}); //missing );
此外,通过删除clearHeader
类,您将从元素中删除position:fixed;
以及通过$(".clearHeader")
选择器重新选择它的功能。我建议不要删除该类并在其上添加新的CSS类以用于样式化。
如果您想在用户向上滚动时“重置”类添加:
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll >= 500) {
$(".clearHeader").addClass("darkHeader");
} else {
$(".clearHeader").removeClass("darkHeader");
}
});
编辑:这是缓存标题选择器的版本 - 性能更好,因为每次滚动时它都不会查询DOM,您可以安全地删除/添加任何类到header元素而不会丢失引用:
$(function() {
//caches a jQuery object containing the header element
var header = $(".clearHeader");
$(window).scroll(function() {
var scroll = $(window).scrollTop();
if (scroll >= 500) {
header.removeClass('clearHeader').addClass("darkHeader");
} else {
header.removeClass("darkHeader").addClass('clearHeader');
}
});
});
答案 1 :(得分:3)
如果您愿意,可以添加一些过渡效果:
http://jsbin.com/boreme/17/edit?html,css,js
.clearHeader {
height:50px;
background:lightblue;
position:fixed;
top:0;
left:0;
width:100%;
-webkit-transition: background 2s; /* For Safari 3.1 to 6.0 */
transition: background 2s;
}
.clearHeader.darkHeader {
background:#000;
}
答案 2 :(得分:2)
我的代码
jQuery(document).ready(function(e) {
var WindowHeight = jQuery(window).height();
var load_element = 0;
//position of element
var scroll_position = jQuery('.product-bottom').offset().top;
var screen_height = jQuery(window).height();
var activation_offset = 0;
var max_scroll_height = jQuery('body').height() + screen_height;
var scroll_activation_point = scroll_position - (screen_height * activation_offset);
jQuery(window).on('scroll', function(e) {
var y_scroll_pos = window.pageYOffset;
var element_in_view = y_scroll_pos > scroll_activation_point;
var has_reached_bottom_of_page = max_scroll_height <= y_scroll_pos && !element_in_view;
if (element_in_view || has_reached_bottom_of_page) {
jQuery('.product-bottom').addClass("change");
} else {
jQuery('.product-bottom').removeClass("change");
}
});
});
工作正常
答案 3 :(得分:1)
这个值是否打算? if (scroll <= 500) { ...
这意味着它发生在0到500之间,而不是500和更高。在原帖中,您在用户向下滚动一点后“
答案 4 :(得分:1)
在类似的情况下,我想避免因性能问题而总是调用addClass或removeClass。我已将滚动处理函数拆分为两个单独的函数,根据当前状态使用。我还根据这篇文章添加了去抖功能:https://developers.google.com/web/fundamentals/performance/rendering/debounce-your-input-handlers
var $header = jQuery( ".clearHeader" );
var appScroll = appScrollForward;
var appScrollPosition = 0;
var scheduledAnimationFrame = false;
function appScrollReverse() {
scheduledAnimationFrame = false;
if ( appScrollPosition > 500 )
return;
$header.removeClass( "darkHeader" );
appScroll = appScrollForward;
}
function appScrollForward() {
scheduledAnimationFrame = false;
if ( appScrollPosition < 500 )
return;
$header.addClass( "darkHeader" );
appScroll = appScrollReverse;
}
function appScrollHandler() {
appScrollPosition = window.pageYOffset;
if ( scheduledAnimationFrame )
return;
scheduledAnimationFrame = true;
requestAnimationFrame( appScroll );
}
jQuery( window ).scroll( appScrollHandler );
也许有人觉得这很有帮助。
答案 5 :(得分:1)
这是在滚动过程中处理类的纯JavaScript示例。
您可能希望限制处理滚动事件,以使处理程序逻辑变得更加复杂,在这种情况下,throttle
lib中的lodash
就派上用场了。
如果您正在做水疗,请记住,一旦不需要使用事件监听器,就需要用removeEventListener
清除事件监听器(例如,在组件的onDestroy
生命周期挂钩期间,例如{{ 1}}用于Vue,或者返回destroyed()
钩子的返回函数以用于React)。
useEffect
const navbar = document.getElementById('navbar')
// OnScroll event handler
const onScroll = () => {
// Get scroll value
const scroll = document.documentElement.scrollTop
// If scroll value is more than 0 - add class
if (scroll > 0) {
navbar.classList.add("scrolled");
} else {
navbar.classList.remove("scrolled")
}
}
// Optional - throttling onScroll handler at 100ms with lodash
const throttledOnScroll = _.throttle(onScroll, 100, {})
// Use either onScroll or throttledOnScroll
window.addEventListener('scroll', onScroll)
#navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
width: 100%;
height: 60px;
background-color: #89d0f7;
box-shadow: 0px 5px 0px rgba(0, 0, 0, 0);
transition: box-shadow 500ms;
}
#navbar.scrolled {
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.25);
}
#content {
height: 3000px;
margin-top: 60px;
}
答案 6 :(得分:0)
对于Android手机$(窗口).scroll(function()和$(文档).scroll(function()可能有效,也可能无效。所以请使用以下内容。
jQuery(document.body).scroll(function() {
var scroll = jQuery(document.body).scrollTop();
if (scroll >= 300) {
//alert();
header.addClass("sticky");
} else {
header.removeClass('sticky');
}
});
这段代码对我有用。希望它会对你有所帮助。