2011-01-28 13 views
5

Plugin hoverintent là trái ngược với những gì tôi cần. Tôi có một .popup được kích hoạt bởi .trigger, khi tôi di chuột ra khỏi nó, tôi muốn .popup KHÔNG phai trong một vài giây, nhưng nếu tôi di chuột ra, sau đó di chuột lên một lần nữa, hủy bỏ fadeout mà sẽ xảy ra và giữ .popup mở.Jquery: Làm thế nào để thêm một sự chậm trễ để mouseleave vì vậy nếu ai đó vô tình di chuyển ra khỏi các yếu tố vô ý, nó vẫn mở

Có ai biết tôi sẽ làm điều này như thế nào không?

này không hoạt động, nhưng nó là một ý tưởng:

$('.trigger').hover(function(){ 
     $('.popup').fadeIn(600) 
    }, function() { 
     $('.popup').delay(2000, function(){ 
      if ($(this).blur() = true) { 
       $('.popup').fadeOut(600) 
      } 
     }); 
    }) 

Trả lời

10

jQuery HoverIntent plugin chính xác là những gì bạn đang tìm kiếm.

Thuộc tính thời gian chờ sẽ đặt khoảng thời gian chuột cần phải nằm ngoài vùng trước khi chức năng ra được gọi.

Trích từ trang web của ý định di chuột:

thời gian chờ: Sự chậm trễ đơn giản, trong mili giây, trước khi chức năng "out" được gọi. Nếu người dùng quay trở lại phần tử trước khi hết thời gian chờ, chức năng "out" sẽ không được gọi (cũng như không gọi hàm "over"). Điều này chủ yếu là để bảo vệ chống lại quỹ đạo cẩu thả cẩu thả/con người tạm thời (và vô tình) đưa người dùng ra khỏi yếu tố mục tiêu ... cho họ thời gian để quay trở lại. Mặc định thời gian chờ: 0

Để thiết lập nó ...

$('.trigger').hoverIntent({ 
    over: startHover, 
    out: endHover, 
    timeout: 2000 
}); 

Sau đó xác định các chức năng để xử lý overout

function startHover(e){ 
    //your logic here 
    $('.popup').fadeIn(600) 
} 

function endHover(){ 
    //your logic here 
    $('.popup').fadeOut(600) 
} 

EDIT:

Bạn cũng có thể điều chỉnh tài sản interval để tăng/giảm lượng thời gian cho startHover func tion để kích hoạt ... mặc định được đặt thành 100 mili giây ... bạn có thể đặt thành 0 để kích hoạt cửa sổ bật lên ngay sau khi chuột vào vùng kích hoạt nếu bạn muốn.

+0

Có các cài đặt để tinh chỉnh mọi thứ. Thuộc tính 'timeout' đặt độ trễ trước khi chức năng 'out' được gọi là – stephen776

+0

Vì vậy, chức năng 'startHover' sẽ hiển thị cửa sổ bật lên của bạn và chức năng' endhover' sẽ xóa nó. Thời gian chờ sẽ đặt độ trễ trước khi chức năng kết thúc được gọi khi bạn di chuột qua khu vực ... đạt được hiệu quả mong muốn của bạn – stephen776

+0

Chỉnh sửa để bao gồm logic fadeIn/fadeOut – stephen776

1

Bạn có thể thử sử dụng các plugin jquery hoverIntent.

0

này làm việc cho tôi:

$(".triger").mouseenter(function() { 
    $(this).find("popup").fadeIn(); 
}).mouseleave(function() { 
    $(this).find("popup").delay(200).fadeOut(); 
}); 
+0

Thao tác này KHÔNG LÀM VIỆC, vì khi bạn quay lại chuột trên .triger trong thời gian chậm trễ, nó vẫn sẽ fadeOut anyways ... chỉ với sự chậm trễ 200. – thorinkor

3

Đây là cách đơn giản nhất để làm điều đó, mà không cần bổ sung thêm:

$('.trigger').hover(function() { 
    clearTimeout(this.timer); 
    $('.popup').fadeIn(600); 
}, function() { 
    this.timer = setTimeout(function() { 
     if ($(this).blur() = true) { // off topic: you should to check this condition ;) 
      $('.popup').fadeOut(600); 
     } 
    }, 2000); 
}); 

setTimeout() và clearTimeout() là JS chức năng có nguồn gốc của HTML DOM Window đối tượng từ mãi mãi.

+0

cho bất cứ ai, những người tình cờ khi điều này như tôi đã làm: có một [giải pháp rất giống với cái này] (http://stackoverflow.com/questions/1273566/how-do-i-check-if-the-mouse-is -over-an-element-in-jquery/1670561 # 1670561), mà tôi thích hơn. ví dụ, điều kiện 'if ($ (this) .blur() = true)' là hoàn toàn sai. – sashn

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