2011-11-29 54 views
8

Tôi có một div có id là "button". Tôi đang cố gắng thay đổi nền của nó để trở thành màu xanh khi tôi di chuột (không sử dụng bộ chọn di chuột CSS).Javascript addEventListener - sử dụng để tạo hiệu ứng di chuột?

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 

function func() 
{ 
    var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

Điều này, tuy nhiên, chỉ đặt màu thành mục màu xanh khi tôi di chuột nhưng không đặt lại thành màu trắng sau khi di chuyển chuột. Làm thế nào tôi có thể sửa lỗi này? (btw, mouseenter và mouseleave không làm việc với điều này dường như).

Trả lời

13

Bạn sẽ cần thiết lập sự kiện tương tự để xử lý mouseout. Bên trong hàm sự kiện mouseout, bạn có thể thay đổi màu trở về màu gốc.

var item = document.getElementById("button"); 
item.addEventListener("mouseover", func, false); 
item.addEventListener("mouseout", func1, false); 

function func() 
{ // not needed since item is already global, 
    // I am assuming this is here just because it's sample code? 
    // var item = document.getElementById("button"); 
    item.setAttribute("style", "background-color:blue;") 
} 

function func1() 
{ 
    item.setAttribute("style", "background-color:green;") 
} 
+0

Ahh ... tuyệt vời! Tôi có một hình ảnh bên trong div của tôi và nó coi đó là "ra", bất kỳ cách nào để che giấu mà nó vẫn nghĩ rằng nó là trong hộp? – antonpug

+0

Có, các sự kiện di chuột qua và di chuột bắt tất cả các sự kiện từ trẻ em (và chúng bong bóng lên). Trong các hàm của bạn, bạn sẽ phải so sánh thuộc tính relatedTarget (W3C) hoặc toTarget/fromTarget (IE) trên tham số sự kiện. Hãy xem liên kết này để biết thêm thông tin: http://www.quirksmode.org/js/events_mouse.html#relatedtarget – AndrewR

+0

Có rất nhiều công việc để chỉ chụp vùng chứa chính và không xử lý bất kỳ thứ gì từ các phần tử con. Trừ khi bạn có bất kỳ lý do cụ thể nào không, bạn có thể đơn giản hóa mã của bạn bằng cách sử dụng hàm 'hover() 'của jQuery. – AndrewR

1

Bạn đã thử mouseout chưa?

(Thật không may sự kiện "di chuột" đã được đặt tên kém - nó sẽ tốt hơn nếu nó được gọi là "mousein" sao cho rõ ràng hơn và trực quan ngược lại với "mouseout". Nhưng đó chỉ là một trong nhiều những sự kiện không phù hợp.)

Tôi nghĩ rằng trình điều khiển chuột và mouseleave là những thứ mà trình duyệt IE có thể không hỗ trợ - mặc dù tôi nghĩ jQuery cũng hỗ trợ các sự kiện đó.

+0

mouseout hoạt động ... nhưng cũng có cái gì đó giống như mousein? mousein không hoạt động – antonpug

+0

Không, không, không có "mousein". Hai sự kiện chắc chắn là "di chuột" và "di chuột". Điều tôi muốn nói là sự kiện "di chuột" hiện tại nên được gọi là "mousein" để nó rõ ràng hơn đối với "mouseout". Nhưng không phải vậy. Tôi đã chỉnh sửa câu trả lời của mình để cố gắng làm rõ hơn một chút. – nnnnnn

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