定位 jquery 中的悬停元素
Targeting a hover element in jquery
我知道这可能会导致灾难,但我想在滚动 150 像素后更改 css:hover 元素。我已经在使用 jQuery 来执行此操作,但我不知道如何定位悬停元素。有什么解决办法吗?
我的代码:
$(window).scroll(function() {
if ( $(window).scrollTop() > 150 ) {
$('#menu li ul li:hover').css('background', 'rgba(0,0,0,1)';
} else {
$('#menu li ul li:hover').css('background', 'rgba(255,255,255,0.3)');
}
});
滚动时更改 class名称。
在您的 CSS 中,使用所需的样式设置 class。
例如:
var $menuLi2 = $('#menu li ul li'); // Cache your selectors
$(window).on("scroll", function() {
$menuLi2.toggleClass( "winScrolled", $(this).scrollTop() > 150 );
});
CSS:
#menu li ul li:hover{ background: rgba(0,0,0,1); }
#menu li ul li.winScrolled:hover{ background: rgba(255,255,255,0.3) }
您不能像那样更改伪 class 的样式,而是使用像
这样基于 class 的解决方案
$(window).scroll(function () {
$('#menu').toggleClass('scrolled', $(window).scrollTop() > 10);
});
然后
#menu.scrolled li ul li:hover {
background:rgba(0, 0, 0, 1);
}
#menu li ul li:hover {
background:rgba(255, 255, 255, 0.3);
}
$(window).scroll(function() {
$('#menu').toggleClass('scrolled', $(window).scrollTop() > 10);
});
body {
height: 1000px;
}
#menu.scrolled li ul li:hover {
background: green;
}
#menu li ul li:hover {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="menu">
<li>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</li>
你太难为自己了。对于样式,请使用 classes.
$(window).on('scroll', function() {
$('#menu').toggleClass('special', $(window).scrollTop() > 10);
});
现在,当用户滚动至少 10 个像素时,class special
将应用于 #menu
。 class 可用于样式化:
#menu.special li ul li {
background-color: rgba(255, 255, 255, 0.3);
}
#menu.special li ul li:hover {
background-color: rgba(0, 0, 0, 1);
}
jQuery 无法修改 CSS 中使用的伪选择器。但是,您可以使用 jQuery 到 add/remove 元素中的 class 并从中挂起 CSS :hover
状态。试试这个:
$(window).scroll(function() {
var method = $(this).scrollTop() > 10 ? 'addClass' : 'removeClass';
$('#menu li ul li:hover')[method]('scrolled');
});
#menu li ul li:hover {
background-color: rgba(255, 255, 255, 0.3);
}
#menu li ul li.scrolled:hover {
background-color: rgba(0, 0, 0, 1);
}
我会使用 class
属性。
.myNewHoverClass:hover{
background: ..... !important;
}
$('element selector').addClass('myNewHoverClass')
css规则之后的!important;
语法是优先应用的,如果你的风格更聪明,就可以避免它。
或
.myHoverClass:hover{
background: ..... ;
}
.myNewHoverClass:hover{
background: ..... ;
}
$('element selector').removeClass('myHoverClass').addClass('myNewHoverClass')
您可能应该使用 jQuery .hover() 方法。在其中获取一个随滚动而变化的变量:)
$('#menu li ul li').hover( function() {
/* Code what happens on hover */
}, function() {
/* Code what happens on stop hover */
});
我知道这可能会导致灾难,但我想在滚动 150 像素后更改 css:hover 元素。我已经在使用 jQuery 来执行此操作,但我不知道如何定位悬停元素。有什么解决办法吗?
我的代码:
$(window).scroll(function() {
if ( $(window).scrollTop() > 150 ) {
$('#menu li ul li:hover').css('background', 'rgba(0,0,0,1)';
} else {
$('#menu li ul li:hover').css('background', 'rgba(255,255,255,0.3)');
}
});
滚动时更改 class名称。 在您的 CSS 中,使用所需的样式设置 class。
例如:
var $menuLi2 = $('#menu li ul li'); // Cache your selectors
$(window).on("scroll", function() {
$menuLi2.toggleClass( "winScrolled", $(this).scrollTop() > 150 );
});
CSS:
#menu li ul li:hover{ background: rgba(0,0,0,1); }
#menu li ul li.winScrolled:hover{ background: rgba(255,255,255,0.3) }
您不能像那样更改伪 class 的样式,而是使用像
这样基于 class 的解决方案$(window).scroll(function () {
$('#menu').toggleClass('scrolled', $(window).scrollTop() > 10);
});
然后
#menu.scrolled li ul li:hover {
background:rgba(0, 0, 0, 1);
}
#menu li ul li:hover {
background:rgba(255, 255, 255, 0.3);
}
$(window).scroll(function() {
$('#menu').toggleClass('scrolled', $(window).scrollTop() > 10);
});
body {
height: 1000px;
}
#menu.scrolled li ul li:hover {
background: green;
}
#menu li ul li:hover {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="menu">
<li>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</li>
你太难为自己了。对于样式,请使用 classes.
$(window).on('scroll', function() {
$('#menu').toggleClass('special', $(window).scrollTop() > 10);
});
现在,当用户滚动至少 10 个像素时,class special
将应用于 #menu
。 class 可用于样式化:
#menu.special li ul li {
background-color: rgba(255, 255, 255, 0.3);
}
#menu.special li ul li:hover {
background-color: rgba(0, 0, 0, 1);
}
jQuery 无法修改 CSS 中使用的伪选择器。但是,您可以使用 jQuery 到 add/remove 元素中的 class 并从中挂起 CSS :hover
状态。试试这个:
$(window).scroll(function() {
var method = $(this).scrollTop() > 10 ? 'addClass' : 'removeClass';
$('#menu li ul li:hover')[method]('scrolled');
});
#menu li ul li:hover {
background-color: rgba(255, 255, 255, 0.3);
}
#menu li ul li.scrolled:hover {
background-color: rgba(0, 0, 0, 1);
}
我会使用 class
属性。
.myNewHoverClass:hover{
background: ..... !important;
}
$('element selector').addClass('myNewHoverClass')
css规则之后的!important;
语法是优先应用的,如果你的风格更聪明,就可以避免它。
或
.myHoverClass:hover{
background: ..... ;
}
.myNewHoverClass:hover{
background: ..... ;
}
$('element selector').removeClass('myHoverClass').addClass('myNewHoverClass')
您可能应该使用 jQuery .hover() 方法。在其中获取一个随滚动而变化的变量:)
$('#menu li ul li').hover( function() {
/* Code what happens on hover */
}, function() {
/* Code what happens on stop hover */
});