jQuery更改悬停在颜色上,然后返回原始颜色

Posted

技术标签:

【中文标题】jQuery更改悬停在颜色上,然后返回原始颜色【英文标题】:jQuery change hover on color, then return back to original color 【发布时间】:2011-10-13 18:00:54 【问题描述】:

我在页面上有一些按钮,它们的颜色通过 jQuery 更改,说明哪个按钮处于活动状态。我只想在悬停时添加颜色更改,然后在离开时返回原始颜色(由 jQuery 决定)。

我第一次使用 css:.showlink li:hover color:#aaa;,它可以正常工作,除了当页面切换和 jQuery 更改颜色时,它会取代 CSS。

然后我决定使用简单的 jQuery,当有东西悬停时,改变它的颜色。这并不完全有效,因为它会永久改变颜色。为了缓解这种情况,我在函数中添加了一点,将其返回为不同的颜色。

有什么方法可以将它恢复为悬停时更改之前的原始颜色吗?

// Changes color on hover
    $(function() 
        $('.showlink').hover(function()
            $(this).css('color', '#aaa');
        ,
        function()
           $(this).css('color', '#f3f3f3');
        );
    );
//Changes color depending on which page is active, fades that page in
    $(function()
        $('#show_one').css('color', '#ffcb06');
        $('#two, #three').hide();
    );

    $('.showlink').click(function()
        $('.showlink').css('color', '#f3f3f3');
        $(this).css('color', '#ffcb06');
        var toShow = this.id.substr(5);
        $('div.page:visible').fadeOut(600, function()
            $('#' + toShow).fadeIn(600);
        );
    );

【问题讨论】:

如果没关系,直接杀掉style属性:$(this).removeAttr('style'); 【参考方案1】:
.showlink li:hover color:#aaa !important;

将取代其他一切。

【讨论】:

帮助我,谢谢。有时简单的事情是最好的 当它似乎没有回答 OPs 的原始问题时,我不确定我是否在探索如何成为公认的答案。另一方面,@DavidThomas' 显然是这样。诡异的。 (我想这是 OP 真正想知道的。):/ 据我记忆和理解,他首先尝试使用没有!important 的css悬停类来设置悬停颜色,但是一旦他用jquery(因为 style-tag-definition 的评分高于 cssclass-definition。!important 会将此定义评分高于其他所有内容。【参考方案2】:

尽管为此使用 CSS 可能是最好的选择,但有时出于某种原因首选 javascript。即使 CSS 永远是击球手,下面的概念也应该在未来帮助你做其他事情。所以,话虽这么说:

悬停时,在更改颜色之前,获取当前颜色并将其存储在元素的数据中。在悬停时,将颜色读回来。

演示:

http://jsfiddle.net/JAAulde/TpmXd/

代码:

/* Changes color on hover */
$( function()

    $( '.showlink' ).hover(
        function()
        
            /* Store jQuerized element for multiple use */
            var $this = $( this );

            $this
                /* Set the pre-color data */
                .data( 'prehovercolor', $this.css( 'color' ) )
                /* Set the new color */
                .css( 'color', '#aaa' );
        ,
        function()
        
            /* Store jQuerized element for multiple use */
            var $this = $( this );

            $this
                /* Set the color back to what is found in the pre-color data */
                .css( 'color', $this.data( 'prehovercolor') );
        
    );
 );

【讨论】:

【参考方案3】:

当我遇到类似元素上的原始数据丢失的问题时,我会在更改它之前调用myElement.setAttribute("oldcolor",myElement.style.color),当我想恢复时,我只需将其设置为该值即可。 myElement.style.color = myElement.getAttribute("oldcolor")

【讨论】:

【参考方案4】:

我建议使用数组来记录原始颜色值,并在hover()mouseleave(第二个)函数中使用:

var originalColors = [];

// Changes color on hover
    $(function() 
        $('.showlink').hover(function()
            originalColors[$(this).index('.showlink')] = $(this).css('color');
            $(this).css('color', '#aaa');
        ,
        function()
           $(this).css('color', originalColors[$(this).index('.showlink')]);
        );
    );

JS Fiddle demo.

您也可以使用addClass()removeClass()

// Changes color on hover
$(function() 
    $('.showlink').hover(function()
        $(this).addClass('hovered');
    ,
    function()
        $(this).removeClass('hovered');
    );
);

JS Fiddle demo.

这将简单地使用 CSS 来应用更改的颜色,并且不需要任何类型的 CSS 颜色的本地存储来在 mouseleave 上重新实现它。

【讨论】:

【参考方案5】:

使用 jQuery .mouseout() 这就像 .hover() 的逆。如果鼠标经过 .showlink 元素然后又离开它,则调用 .mouseout()。

    $('.showlink').hover(function()
        $(this).css('color', '#aaa');
    
    $('.showlink').mouseout(function()
        $(this).css('color', '#bbb');
    

【讨论】:

以上是关于jQuery更改悬停在颜色上,然后返回原始颜色的主要内容,如果未能解决你的问题,请参考以下文章

在悬停时使用 JQuery 更改背景颜色

jQuery,悬停一个有序的颜色数组,然后在单击时设置悬停颜色

悬停和鼠标速度上的颜色过渡问题

使用悬停更改 DIV 颜色并单击 JQuery

使用 jquery 动态更改背景颜色

使用jquery动态更改背景颜色后,背景颜色的CSS悬停选择器不起作用