2012-03-07 37 views
6

Tôi chưa bao giờ thấy hiệu ứng di chuột như thế này trước đây và tôi đang cố gắng hiểu nó đạt được như thế nào. Bạn sẽ nhận thấy in this example, rằng khi người dùng di chuột qua một liên kết, màu sắc liên kết có thể là bất kỳ một trong 1 màu nào được gán trong biểu định kiểu (xem bên dưới) một cách ngẫu nhiên. Làm thế nào để bạn tạo hiệu ứng di chuột này? Nó có thể được thực hiện hoàn toàn với CSS?Cách gán màu ngẫu nhiên cho hiệu ứng di chuột

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; } 

Trả lời

4

Mã khóa của mã jQuery được tải ở chân trang.

Hãy chú ý đến các tác giả nhận xét về tập lệnh hoặc tìm kiếm author's permission để sử dụng lại nó.

/* 

    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() { 
    }); 
} 
+0

Xét lập trình comments Tôi không nghĩ rằng bạn nên đã gửi mã của họ. Mặc dù CSS và jQuery là phía máy khách và có sẵn cho tất cả mọi người nó vẫn là mã của họ và họ đã dành thời gian viết nó cho trang web này. Ông đã thành thật trong mã bình luận, nơi ông đã thực hiện thay đổi và bình luận mã riêng của mình. Tôi đã đăng các ví dụ bên dưới làm như vậy và không bị đánh cắp. – Anagio

+2

@Anagio Mã trên web mở và tác giả mời bạn tìm hiểu nhưng không ăn cắp. Vì vậy, tôi không thực sự nghĩ rằng có một vấn đề trong việc đăng nó. Nó cũng không phải là duy nhất như câu trả lời của riêng bạn chỉ ra. – toomanyairmiles

+0

điểm của tôi là người lập trình đã dành thời gian để nhận xét mã mà anh ta đã thay đổi không phải của anh ấy và không yêu cầu ai đánh cắp mã tùy chỉnh của anh ấy. Có nó trên trang web mở nhưng đó là những bức ảnh mà các nhiếp ảnh gia có bản quyền, chỉ vì chúng tôi có thể tải xuống chúng không có nghĩa là chúng ta nên dùng. Có các ứng dụng mã nguồn mở mà bạn cần giấy phép và nếu bạn đã tìm thấy bằng cách sử dụng chúng mà không có giấy phép, bạn vẫn có thể gửi DMCA chống lại các trang web ngay cả khi mã là nguồn mở 100%. Nếu câu hỏi đã được hỏi trên StackOverflow tôi chắc chắn một vài người sẽ trả lời với mã ví dụ trong jsfiddle – Anagio

9

Vì một yếu tố ngẫu nhiên được giới thiệu, tôi không nghĩ rằng có cách làm hoàn toàn với CSS.

Đây là cách tiếp cận đơn giản của tôi đối với vấn đề, khi sử dụng jQuery.

Bạn có thể thấy một ví dụ làm việc ở đây: 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]; 
} 
+0

Tôi cần thay đổi bg di chuột của div với lớp "bài viết-chứa". Thay đổi "a" thành "thùng chứa bài viết" dường như không hoạt động. Tôi có làm điều gì sai? – Arete

+0

@Arete, vì bạn đang làm việc với một lớp, bạn cần sử dụng bộ chọn '.article-container' (chú ý dấu chấm). Cũng lưu ý rằng ví dụ này hoàn toàn thay đổi thuộc tính 'class', trong trường hợp của bạn bằng' addClass() 'và' removeClass() 'có thể tốt hơn. –

Các vấn đề liên quan