我正在开发一个应用程序,我需要为active
和hover
事件添加类click
。
我在这里面临的挑战是当我将我的内容悬停时,它会添加课程active
。没有问题。
由于它现在处于活动状态,当我即将点击内容时,它应该与类active
保持一致。但相反,它会进入正常状态并切换到类。
JQuery的
$("div").hover(
function() {
$(this).addClass('active');
}, function() {
$( this ).removeClass('active');
}
);
$( "div" ).click(function(){
$(this).toggleClass('active');
});
答案 0 :(得分:6)
将CSS用于悬停事件
div:hover{background:red;}
从您的Javascript中删除悬停事件:
$( "div" ).click(function(){
$(this).toggleClass('active');
});
<强> Fiddle 强>
如果你想要没有CSS的相同功能。
添加第二个名为clicked
的班级。在删除类之前,让悬停事件检查此类。
$("div").hover(
function() {
$(this).addClass('active');
}, function() {
if(!$( this).hasClass('clicked') ){
$( this ).removeClass('active');
}
}
);
$("div").click(function(){
$(this).toggleClass('clicked');
});
<强> Fiddle 强>
答案 1 :(得分:1)
<强> HTML:强>
<div id="div-p">
<label for="toggle-1"></label>
<input type="checkbox" id="toggle-1">
<div id="div"></div>
</div>
<强> CSS:强>
#div-p {
position: relative;
}
label {
position: absolute;
width: 150px;
height: 150px;
background: transparent;
}
input[type=checkbox] {
position: absolute;
top: -9999px;
left: -9999px;
}
input[type=checkbox]:checked ~ div#div {
background-color: red !important;
}
#div {
width: 150px;
height: 150px;
background-color: blue;
display: inline-block;
}
label:hover {
background-color: red;
}
答案 2 :(得分:1)
如果你必须使用 JS ONLY .......
如果您使用在toggleOn
事件发生时翻转的变量click
,则应解决您的问题。您不必在点击时切换toClass,因为您总是在悬停时点击:
var toggleOn = false;
$("div").hover(
function() {
$(this).addClass('active');
}, function() {
toggleOn || $( this ).removeClass('active');
}
);
$( "div" ).click(function(){
toggleOn = true;
});
答案 3 :(得分:0)
让我们说hover
已添加div
和active
类。现在点击,理想情况下应删除active
类。
为此,请click
与hover
(为mouseenter
和mouseout
)绑定,如下所示:
$("div").bind('click mouseenter', function () {
if ($(this).hasClass("active")) $(this).removeClass("active");
else $(this).addClass("active");
});
$('div').mouseout(function () {
if ($(this).hasClass("active")) $(this).removeClass("active");
});
答案 4 :(得分:0)
试试这个:使用一个状态变量悬停或关闭,当用户点击图像和toggleClass时,使用此变量来了解悬停状态。
var clicked = false;
var activeByClicked = false;
$("div").hover(
function() {
if(!activeByClicked)
$(this).addClass('active');
}, function() {
if(!activeByClicked)
{
clicked = false;
$( this ).removeClass('active');
}
}
);
$( "div" ).click(function(){
if(clicked)
{
if(!$(this).hasClass('active'))
{
activeByClicked = true;
}
else
{
//clicked = false;
activeByClicked = false;
}
$(this).toggleClass('active');
}
else
{
clicked = true;
activeByClicked = true;
}
});
<强> Demo 强>
答案 5 :(得分:0)
首先,它可以在JavaScript中完成,其中:hover添加到所选规则,但如果你想在点击时删除颜色,最好的选择是使用第二个类。
<强> CSS:强>
div{
width: 150px;
height: 150px;
background-color: blue;
display: inline-block;
}
div.active, div.hoverActive{
background-color: red;
}
<强> JavaScript的:强>
$("div").hover(
function() {
$(this).addClass('hoverActive');
}, function() {
$( this ).removeClass('hoverActive');
}
);
$( "div" ).click(function(){
var div = $(this);
div.toggleClass('active');
if (!div.is(".active")) {
div.removeClass("hoverActive");
}
});
的jsfiddle:
答案 6 :(得分:-1)
更改您的点击代码,因为切换将被悬停功能抵消:
$( "div" ).click(function(){
if($(this).hasClass("active")) $(this).removeClass("active");
else $(this).addClass("active");
});