使用 jQuery 交换字体和背景颜色

发布于 2024-10-07 18:22:10 字数 931 浏览 2 评论 0原文

我在页面上显示 40 多个框:

<div id="primary">
    <div class="box" style="background:....">
        <a href="" style="color:....">box1</a>
    </div>
    <div class="box" style="background:....">
        <a href="" style="color:....">box2</a>
    </div>
    ....
</div>

如您所见,我设置了背景颜色和文本颜色。悬停时我想交换颜色:

      $(".box").each( function () {
          $(this).data('baseColor',$(this).css('background-color'));
          $(this).find('a').data('fontColor',$(this).css('color'));
          $(this).hover(function() {
            $(this).animate({ backgroundColor:
                       $(this).data('fontColor') }, 500);
          },function() {
            $(this).animate({ backgroundColor: 
                       $(this).data('baseColor') }, 1000);
          });
        });

背景颜色的动画有效,但我无法更改 a 元素的字体颜色。有什么想法吗?

I display 40+ boxes on a page:

<div id="primary">
    <div class="box" style="background:....">
        <a href="" style="color:....">box1</a>
    </div>
    <div class="box" style="background:....">
        <a href="" style="color:....">box2</a>
    </div>
    ....
</div>

As you can see I set background-color and text-color. On hover I want to swap the colors:

      $(".box").each( function () {
          $(this).data('baseColor',$(this).css('background-color'));
          $(this).find('a').data('fontColor',$(this).css('color'));
          $(this).hover(function() {
            $(this).animate({ backgroundColor:
                       $(this).data('fontColor') }, 500);
          },function() {
            $(this).animate({ backgroundColor: 
                       $(this).data('baseColor') }, 1000);
          });
        });

The animation of the background-color works but I can not change the font color of the a element. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别在捏我脸啦 2024-10-14 18:22:10

正如 @Brandon 提到的,您需要 jQuery UI (或其他东西;)来为非整数属性设置动画。

更大的问题是 each 回调中的上下文发生变化:在 hover 回调方法中,this 的值并不总是你想要的。此外,创建新的 jQuery 对象(使用 $(...))相对昂贵。尝试:

var cssBox = {
    backgroundColor: $('.box').css('background-color'),
    color: $('.box').css('color')
};

var cssLink = {
    backgroundColor: $('.box > a').css('background-color'),
    color: $('.box > a').css('color')
};

$(".box").each(function() {
    var $this = $(this),
        $this_a = $this.children('a');

    $this.data('baseColor', $this.css('background-color'));
    $this.data('fontColor', $this_a.css('color'));
    $this.hover(function() {
        $this.animate(cssLink, 500);
        $this_a.animate(cssBox, 500);
    }, function() {
        $this.animate(cssBox, 1000);
        $this_a.animate(cssLink, 1000);
    });
});

此处进行演示。

As @Brandon mentioned, you need jQuery UI (or something ;) to animate non-integer properties.

The bigger issue is the change of context in your each callback: inside the hover callback methods, the value of this won't always be what you want. Also, creating new jQuery objects (with $(...)) is relatively expensive. Try:

var cssBox = {
    backgroundColor: $('.box').css('background-color'),
    color: $('.box').css('color')
};

var cssLink = {
    backgroundColor: $('.box > a').css('background-color'),
    color: $('.box > a').css('color')
};

$(".box").each(function() {
    var $this = $(this),
        $this_a = $this.children('a');

    $this.data('baseColor', $this.css('background-color'));
    $this.data('fontColor', $this_a.css('color'));
    $this.hover(function() {
        $this.animate(cssLink, 500);
        $this_a.animate(cssBox, 500);
    }, function() {
        $this.animate(cssBox, 1000);
        $this_a.animate(cssLink, 1000);
    });
});

Demo here.

欲拥i 2024-10-14 18:22:10

jQuery 无法自行设置颜色动画;您必须使用颜色插件

至于交换颜色,您必须有一个临时变量来临时存储其中一种颜色。一些伪代码是这样的:

var bgCol = $(this).backgroundColor()
$(this).backgroundColor = $(this).textColor();
$(this).textColor = bgCol;

jQuery can't animate colors on it's own; you'll have to use the color plugin.

As for swapping the colors around, you'll have to have an interim variable to temporarily store one of the colors. Some pseudocode would be this:

var bgCol = $(this).backgroundColor()
$(this).backgroundColor = $(this).textColor();
$(this).textColor = bgCol;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文