我有一个悬停效果的链接。 当您将鼠标悬停时,文本将变为红色并加下划线。 单击它时,文本保持红色并带下划线。
我的问题是,一旦你点击链接,悬停效果仍然会播放......但我不想要这个效果。
(我不使用切换,因为最后的Jquery不支持它:1.9)
$("h1").addClass("clicked")
$('h1').click(function() {
if($(this).hasClass("clicked")) {
$("span").animate({"width": "145px"}, 300);
$("h1").css({"color": "red"}, 300);
$(this).removeClass("clicked");
} else {
$("span").animate({"width": "0"}, 300);
$("h1").css({"color": "black"}, 300);
$(this).addClass("clicked");
}
});
$('h1').hover(function() {
if($(this).hasClass("clicked")) {
$("span").stop().animate({"width": "145px"}, 300);
$("h1").css({"color": "red"}, 300);
$(this).removeClass("clicked")
} else {
$("span").stop().animate({"width": "0"}, 300);
$("h1").css({"color": "black"}, 300);
$(this).addClass("clicked");
}
});
答案 0 :(得分:3)
如果我没有误解你的问题,你想:
以下部分代码需要更改。对于hover
,onmouseover
可以为onmouseleave
其他一个函数设置两个函数,它就像:
$('h1').hover(function() {
if ($(this).hasClass("clicked")) {
return;
}
$("span").stop().animate({
"width": "145px"
}, 300);
$("h1").css({
"color": "red"
}, 300);
}, function() {
if ($(this).hasClass("clicked")) {
return;
}
$("span").stop().animate({
"width": "0"
}, 300);
$("h1").css({
"color": "black"
}, 300);
});
我假设以上几点修改了你的jsfiddle。如果你移动鼠标,它会变红;带走鼠标,变黑,点击使其始终为红色。
答案 1 :(得分:1)
您可以使用unbind jQuery方法取消绑定事件。
$('h1').click(function() {
$(this).unbind('mouseenter mouseleave');
...
}
答案 2 :(得分:1)
答案 3 :(得分:1)
使用css和jquery最简单的方法
$('h1').click(function() {
if($(this).hasClass("clicked")) {
$(this).removeClass("clicked");
} else {
$(this).addClass("clicked");
}
});
span {
border-bottom: 5px solid red;
height: 0px;
margin-top: 40px;
left:10px;
width: 0;
position: absolute;
display: inline-block;
transition: width 0.3s;
}
h1{
color: black;
transition: all 0.3s;
}
h1:hover{
color: red;
}
h1:hover span{
width: 145px;
color: red;
}
h1.clicked{
color: red;
}
h1.clicked span{
width: 145px;
color: red;
}
<h1>
MY TEXT <span></span>
</h1>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>