我有一组DIV
s,我需要让它们对鼠标悬停有效,当点击其中一个DIV
时,点击的DIV应该看起来像是在盘旋(或者无论什么效果)直到另一个DIV被点击。
<div class="items" id="item1">AN ITEM</div>
<div class="items" id="item2">AN ITEM</div>
<div class="items" id="item3">AN ITEM</div>
<div class="items" id="item4">AN ITEM</div>
我已经尝试使用jQuery实现这一点,但鼠标输出后效果消失了。
$('.items').hover(function () {
var div = $(this).attr('id');
if ($(div).css("background-color") == settings.color2) {
return false;
} else {
$("#" + div).css("background-color", settings.color2);
}
}, function () {
var div = $(this).attr('id');
if ($(div).css("background-color") == settings.color2) {
return false;
} else {
$("#" + div).css("background-color", "transparent");
}
}).click(function () {
$(this)
.closest('div')
.css("background-color", "transparent");
$(this).css("background-color", settings.color2);
});
答案 0 :(得分:3)
我建议不要使用JS添加悬停样式,而是建议通过CSS添加它们。并将相同的样式添加到“活动”类,并在单击时切换该类。
这样的事情:
CSS:
.items:hover,
.items.active {
background-color: /* whatever */;
}
JS:
$('.items').on('click', function() {
$('.items').removeClass('active');
$(this).addClass('active');
});
答案 1 :(得分:2)
尝试在点击上添加“有效”类,其类型与悬停相同。单击其他div时,从先前单击的div中删除该类,并将其添加到当前div。
答案 2 :(得分:1)
尝试
var $items = $('.items').hover(function () {
$(this).css("background-color", 'red');
}, function () {
if (!$(this).hasClass('clicked')) {
$(this).css("background-color", "transparent");
}
}).click(function () {
$items.filter('.clicked').css("background-color", "transparent").removeClass('clicked')
$(this).addClass('clicked').css("background-color", 'red');
});
演示:Fiddle
注意:我不会使用类来设置单击状态的样式,因为它看起来像背景颜色来自一个选项,在这种情况下,它将很难分配一个类,否则点击的类也需要是作为一个设置传递。
更好的选择是
var settings = {
color2: 'red',
clicked: 'clicked'
}
var $items = $('.items').hover(function () {
$(this).css("background-color", settings.color2);
}, function () {
if (!$(this).hasClass('clicked')) {
$(this).css("background-color", "transparent");
}
}).click(function () {
$items.filter('.' + settings.clicked).removeClass(settings.clicked)
$(this).addClass(settings.clicked);
});
演示:Fiddle