的onmouseover /出

时间:2013-01-15 21:18:11

标签: javascript onmouseout

我遇到的两个问题。

  1. 鼠标悬停功能非常快,但它肯定无法正常工作。我为onmouseout状态创建了一个单独的函数,但它没有帮助。
  2. 该类正确更改,但它保持更改状态并且不会返回到原始类。这取决于链接是否在所选页面上。任何帮助都会非常感激
  3. 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 -->
    

3 个答案:

答案 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的回答)