Ken*_*all 4 html css jquery click hover
我的"关于"页面上有一个小的"交互式幻灯片",用户可以在其中单击5个按钮中的一个,然后查看生成的"幻灯片".每个"幻灯片"都是一个<section>元素,内部有不同的内容.页面加载时,第一个按钮("关于我")应为红色.以下是其他要求:

我有一个.click()完美的工作,但我似乎无法.hover()同时工作的效果.当我运行两个效果时,hover效果会覆盖click效果.一旦我的鼠标在点击它之后离开按钮,背景就会变为dodgerblue,即使它应该保留indianred(我认为这是因为悬停事件的'mouseoff'部分).
我看过类似的问题,但找不到能回答我当前问题的问题.
有什么建议?
var aryButtons = $('.button');
$(aryButtons[0]).css('background-color', 'indianred');
// IMPORTANT - If you comment this section out, the hover effect disappears, but the click function works. However, I need to have both working at once, so that when a button is clicked, it will stay indian red even when the user leaves the element. In addition, they need to be able to hover over other elements again.
$(aryButtons).hover(function () {
$(this).css('background-color', 'indianred');
}, function () {
$(this).css('background-color', 'dodgerblue');
});
$(aryButtons).click(function () {
$.each(aryButtons, function () {
$(this).css('background-color', 'dodgerblue');
});
$(this).css('background-color', 'indianred');
});
Run Code Online (Sandbox Code Playgroud)
<section class="button"></section>
<section class="button"></section>
<section class="button"></section>
Run Code Online (Sandbox Code Playgroud)
.button {
display: inline-block;
height: 50px;
width: 50px;
margin-right: 10px;
background-color: dodgerblue;
border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
这是一个jsFiddle:https://jsfiddle.net/UnaviaMedia/b3ozk00p/8/
你使用的是错误的工具.
CSS更适合这项任务.所有jQuery需要做的就是翻转课程.
添加此CSS
.button.clicked {
background-color: indianred;
}
.button.clicked:hover {
background-color: dodgerblue;
}
.button:hover {
background-color: indianred;
}
Run Code Online (Sandbox Code Playgroud)
将Javascript更改为此
aryButtons.on('click', function() {
$(this).toggleClass('clicked');
});
Run Code Online (Sandbox Code Playgroud)
注意:$(...)无论何时想要使用jQuery,都不需要重新包装所有内容.您的$('.buttons')for 声明aryButtons将作为jQuery对象保留.这就是我们摆脱它的原因.您应该使用.on事件绑定功能,因为它允许您切换在元素上跟踪的事件.在jQuery的事件绑定调用中结束的任何东西都需要是a function,所以我们将这个$(this).toggleClass()调用包装在一个匿名函数中.这应该解决您的代码的所有问题.
所以,经过额外的要求,这里是更新的小提琴:
同样,相当简单:
JavaScript的
aryButtons.on('click', function() {
$(this).toggleClass('clicked').siblings().removeClass('clicked');
});
Run Code Online (Sandbox Code Playgroud)
所有额外的CSS
.button.clicked,
.button.clicked.waiting:hover
{
background-color: indianred;
}
.button:hover {
background-color: indianred;
}
Run Code Online (Sandbox Code Playgroud)
我希望有所帮助.