我遇到的两个问题。
JAVASCRIPT:
function changeRollover(rollover) {
var rollItems = document.getElementById(rollover);
var rollLinks = rollItems.getElementsByTagName('a');
var noOfLinks = rollLinks.length;
for (var r = 0; r < noOfLinks; r++) {
var normalText = rollLinks[r].innerHTML;
var rolloverText = rollLinks[r].title;
var rolloverItem = document.getElementById(rollover);
rolloverItem.innerHTML = "<a href='#' title='" + normalText + "'>" + rolloverText + "</a>";
rolloverItem.class = rollover + "rollover";
}
}
HTML:
<div class="nav">
<ul id="NavItems">
<li id="item0" class="selected" onClick="changeClass(this.id)"
onmouseover="changeRollover(this.id)">
<a href="#" title="Shop Trends">Collections</a>
</li>
<li id="item1" onClick="changeClass(this.id)"
onmouseover="changeRollover(this.id)">
<a href="#" title="Shop Everything" >All Jewlery</a>
</li>
<li id="item2" onmouseover="changeRollover(this.id)"
onClick="changeClass(this.id)">
<a href="#" title="Shop Press">As Seen On</a>
</li>
<li id="item3" onmouseover="changeRollover(this.id)"
onClick="changeClass(this.id)">
<a href="#" title="fashion + shop">Collaborations</a>
</li>
<li id="item4" onmouseover="changeRollover(this.id)"
onClick="changeClass(this.id)">
<a href="#" title="Shop Designer">Designer Pop Ups</a>
</li>
</ul>
<div class="shipping">
<a href="#">start your free orders today<br>
*** click here for more information ***</a>
</div>
</div>
<!-- .nav -->
答案 0 :(得分:2)
您想要的效果(从可用性角度来看可疑,但除此之外)使用一些简单的CSS可以更好地实现:
#NavItems .hover {
display: none;
}
#NavItems:hover .hover {
display: inline;
}
#NavItems:hover .normal {
display: none;
}
这需要这样的标记:
<ul id="NavItems">
<li id="item0">
<a href="#">
<span class="normal">Collections</span><span class="hover">Shop Trends</span>
</a>
</li>
</ul>
答案 1 :(得分:0)
根据您的浏览器兼容性要求,我建议使用onmouseenter作为您的功能的触发器。
DOM Events - Browser Compatability
但是有一件事,你错过了一个可以为你重置课程的onmouseout功能。将类附加到元素后,如果您希望它根据用户的操作而消失,则必须手动删除它。所以创建类似resetRollover函数的东西,如下所示,并附加一个触发该函数的onmouseout DOM侦听器:
function resetRollover(rollover) {
var className = document.getElementById(rollover).className;
document.getElementById(rollover).className = className.substring(0, indexOf(' rollover'));
}
答案 2 :(得分:0)
问题是onmouseover
处理程序在li
上。当鼠标悬停在<a>
的{{1}}上时,再次触发<li>
的“重新进入”onmouseover
。
示例here:这与您的代码相同,我添加了一些颜色。如果仅在黑色部分(<li>
)上移动鼠标,则会根据需要进行翻转。但是当您在绿色部分上移动鼠标时(<li>
s)。
作为解决方案,您可以处理<a>
上的翻转或更改基本设计(请参阅@Thomas的回答)