【问题标题】:How to randomly assign a color on hover effect如何在悬停效果上随机分配颜色
【发布时间】:2012-03-07 15:04:53
【问题描述】:

我以前从未见过这样的悬停效果,我正在尝试了解它是如何实现的。您会注意到in this example,,当用户将鼠标悬停在链接上时,链接变为的颜色可以是随机分配在样式表(见下文)中的5 种颜色中的任何一种。 你如何创建这种悬停效果?可以纯粹用CSS来完成吗?

a:hover {
  color:#1ace84;
  text-decoration: none;
  padding-bottom: 2px;
  border: 0;
  background-image: none;
  }

a.green:hover { color: #1ace84; }
a.purple:hover { color: #a262c0; }
a.teal:hover { color: #4ac0aa; }
a.violet:hover { color: #8c78ba; }
a.pink:hover { color: #d529cd; }

【问题讨论】:

    标签: html css


    【解决方案1】:

    由于引入了随机因素,我认为没有办法完全使用 CSS。

    这是我使用 jQuery 解决问题的简单方法。

    您可以在此处查看一个工作示例:http://jsfiddle.net/GNgjZ/1/

    $(document).ready(function()
    {
        $("a").hover(function(e)
        {
            var randomClass = getRandomClass();
            $(e.target).attr("class", randomClass);
        });
    });
    
    function getRandomClass()
    {
        //Store available css classes
        var classes = new Array("green", "purple", "teal", "violet", "pink");
    
        //Get a random number from 0 to 4
        var randomNumber = Math.floor(Math.random()*5);
    
        return classes[randomNumber];
    }
    

    【讨论】:

    • 我需要用“article-container”类更改一个div的悬停bg。将“a”更改为“article-container”似乎不起作用。我做错了吗?
    • @Arete,因为你正在使用一个类,你需要使用.article-container 选择器(注意点)。另请注意,此示例完全更改了 class 属性,在您的情况下使用 addClass()removeClass() 可能会更好。
    【解决方案2】:

    jQuery 代码的关键部分加载在页面的页脚中。

    请关注作者对脚本的评论,或寻求author's permission重复使用。

    /* 
    
      Code below this point is not licensed for reuse,
      please look and learn but don't steal
    
    */
    var lastUsed;
    function randomFrom(arr){
      var randomIndex = Math.floor(Math.random() * arr.length);
      lastUsed = arr[randomIndex];
      return lastUsed;
    }
    color_classes = ['green','purple','violet','teal','pink'];
    function initLinks() {
      $('#wrap a').hover(function() {
        new_classes = color_classes.slice();
    
        var index = $.inArray(lastUsed, new_classes);
        new_classes.splice(index, 1);
    
        var classes = $(this).attr('class');
        if (classes) {
            classes.split(' ');
            $(classes).each(function(i, className) {
                var index = $.inArray(className, new_classes);
                if (index>0) {
                    new_classes.splice(index, 1);
                }
    
            });
        }
        $(this).removeClass(color_classes.join(' ')).addClass(randomFrom(new_classes));
      }, function () {
      });
    }
    

    【讨论】:

    • 考虑到编码器 cmets,我认为您不应该发布他们的代码。尽管 CSS 和 jQuery 是客户端并且可供所有人使用,但它仍然是他们的代码,他们花时间为这个网站编写代码。他在评论代码时很诚实,他对自己的代码进行了更改并修改了自己的代码。我在下面发布了一些例子,它们做同样的事情并且没有被盗。
    • @Anagio 代码在公开网上,作者邀请您学习但不要窃取。所以我真的不认为发布它有问题。它也不是您自己的答案所指出的那样独特。
    • 我的意思是编码员花时间评论他更改的不属于他的代码,并要求没有人窃取他的自定义代码。是的,它在开放的网络上,但摄影师拥有版权的照片也是如此,仅仅因为我们可以下载它们并不意味着我们应该接受它们。有些开源应用程序需要许可证,如果您发现在没有许可证的情况下使用它们,即使代码是 100% 开源的,您仍然可以针对网站提交 DMCA。如果这个问题是在 StackOverflow 上提出的,我相信有些人会用 jsfiddle 中的示例代码回答
    • 我个人认为引用代码不是问题。它被用于学习,我有理由相信,窃取意味着人们在自己的网站上使用它,而不是在公共论坛上从中学习。如果你特别担心,你可以给那个人发电子邮件并检查他的意图。当问题与特定页面有关时,如果不参考该特定页面就很难回答。
    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2013-10-17
    • 2022-01-03
    • 1970-01-01
    • 2021-10-18
    • 2016-09-19
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多