jquery "show" 效果显示错误元素
jquery "show" effect shows wrong element
我正在尝试让 "Up" 和 "Down" 这两个图标在我将鼠标悬停在它们上方时变成更深的颜色。所以我又制作了两个图标,"UpHover" 和 "DownHover",它们开始时是隐藏的,分别在我向上或向下鼠标输入时显示,当我鼠标离开时再次隐藏。 Down 正常,但不知为什么,当我用鼠标输入Up 时,Up 和Down 都隐藏了,并且UpHover 和DownHover 都显示了。
当我擦除行 $(".UpHover").show();
时(我在下面用星号围绕它)效果停止,所以错误一定在该行中。但我终究无法弄清楚为什么这条线与 Down 或 DownHover 有任何关系。我错过了什么?
<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>
<script type="text/javascript">
$(".UpHover").hide();
$(".DownHover").hide();
$(".Up").mouseenter(function () {
$(".Up").hide();
***$(".UpHover").show();***
});
$(".UpHover").mouseleave(function () {
$(".Up").show();
$(".UpHover").hide();
});
$(".Down").mouseenter(function () {
$(".Down").hide();
$(".DownHover").show();
});
$(".DownHover").mouseleave(function () {
$(".Down").show();
$(".DownHover").hide();
});
</script>
您应该使用 CSS 伪 class :hover 来执行此操作,而不是 javascript。
当元素有鼠标悬停时,您可以定义一组特殊的样式。指定此样式的备用图像。
更改图像的顺序,使替换图像紧挨着它替换的图像。
<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>
实际情况是,当您隐藏 Up
时,Down
图像会向上移动以填充 space。由于那是鼠标所在的位置,$(".Down").mouseenter
事件会触发,它也会被隐藏。
重新排序时,UpHover
会填入 Up
位置。
正如其他人所建议的,只需使用 CSS,您不需要任何 JavaScript:
<%= link_to "#", class: "Up" %>
<%= link_to "#", class: "Down" %>
.Up, .Down
{
display: inline-block;
height: /* height of image */;
width: /* width of image */;
}
.Up
{
background-image: url(Up.png);
}
.Down
{
background-image: url(Down.png);
}
.Up:hover
{
background-image: url(UpHover.png);
}
.Down:hover
{
background-image: url(DownHover.png);
}
最好更改背景位置或在悬停时更改 class,
$('.Up').hover(function(){
$(this).addClass('active');
}, function(){
$(this).removeClass('active');
});
我正在尝试让 "Up" 和 "Down" 这两个图标在我将鼠标悬停在它们上方时变成更深的颜色。所以我又制作了两个图标,"UpHover" 和 "DownHover",它们开始时是隐藏的,分别在我向上或向下鼠标输入时显示,当我鼠标离开时再次隐藏。 Down 正常,但不知为什么,当我用鼠标输入Up 时,Up 和Down 都隐藏了,并且UpHover 和DownHover 都显示了。
当我擦除行 $(".UpHover").show();
时(我在下面用星号围绕它)效果停止,所以错误一定在该行中。但我终究无法弄清楚为什么这条线与 Down 或 DownHover 有任何关系。我错过了什么?
<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>
<script type="text/javascript">
$(".UpHover").hide();
$(".DownHover").hide();
$(".Up").mouseenter(function () {
$(".Up").hide();
***$(".UpHover").show();***
});
$(".UpHover").mouseleave(function () {
$(".Up").show();
$(".UpHover").hide();
});
$(".Down").mouseenter(function () {
$(".Down").hide();
$(".DownHover").show();
});
$(".DownHover").mouseleave(function () {
$(".Down").show();
$(".DownHover").hide();
});
</script>
您应该使用 CSS 伪 class :hover 来执行此操作,而不是 javascript。
当元素有鼠标悬停时,您可以定义一组特殊的样式。指定此样式的备用图像。
更改图像的顺序,使替换图像紧挨着它替换的图像。
<%= link_to image_tag("Up.png", class: "Up"), '#' %>
<%= link_to image_tag("UpHover.png", class: "UpHover"), '#' %>
<%= link_to image_tag("Down.png", class: "Down"), '#' %>
<%= link_to image_tag("DownHover.png", class: "DownHover"), '#' %>
实际情况是,当您隐藏 Up
时,Down
图像会向上移动以填充 space。由于那是鼠标所在的位置,$(".Down").mouseenter
事件会触发,它也会被隐藏。
重新排序时,UpHover
会填入 Up
位置。
正如其他人所建议的,只需使用 CSS,您不需要任何 JavaScript:
<%= link_to "#", class: "Up" %>
<%= link_to "#", class: "Down" %>
.Up, .Down
{
display: inline-block;
height: /* height of image */;
width: /* width of image */;
}
.Up
{
background-image: url(Up.png);
}
.Down
{
background-image: url(Down.png);
}
.Up:hover
{
background-image: url(UpHover.png);
}
.Down:hover
{
background-image: url(DownHover.png);
}
最好更改背景位置或在悬停时更改 class,
$('.Up').hover(function(){
$(this).addClass('active');
}, function(){
$(this).removeClass('active');
});