Irvin Dominin là một sự trợ giúp rất lớn đối với tôi về vấn đề này. Tôi đã mở rộng nó nếu có ai có cùng yêu cầu bổ sung mà tôi có.
Tôi cũng muốn đặt độ trễ trên màn hình hiển thị chú giải công cụ. Bởi vì tùy chọn "hiển thị" được đặt thành null, tôi cần sao chép nó. (tùy chọn hiển thị được đặt thành null để dừng cửa sổ bật lên rõ ràng vẽ lại khi chuột di chuyển từ chú giải công cụ trở lại liên kết gọi).
Tôi cần phải trì hoãn, vì trang tôi đang phát triển có rất nhiều chú giải công cụ người dùng và hiển thị tức thì hơi chói tai khi di chuột qua trang.
Giải pháp của tôi là sử dụng sự kiện mở để ẩn chú giải công cụ và thêm thời gian chờ trước khi hiển thị lại. Ngoại lệ cho điều này là nếu cùng một tooltip đã được mở, và để sắp xếp, tôi thêm thuộc tính data/false vào mỗi phần tử khi mở/đóng nó (lấy phần tử nguồn từ các hàm mở và đóng không dễ, nhưng Tôi nghĩ nó đúng).
Tuyên bố từ chối trách nhiệm: Tôi không phải là người chủ tại JQuery và cũng có thể có cách dễ dàng hơn để tái tạo điều này. Tôi gặp khó khăn xuống thỏ lỗ với mã đôi khi, vì vậy mã dưới đây có thể là lời khuyên xấu ...
var ttWait; // global variable for tooltip delay
$(document).tooltip({
items: '.userSummaryLink',
show: null,
content: function() { // build the popup content
return $(this).prop('title');
},
open: function (event, ui) { // simulating the show option (that needs to be null to stop the popup closing and reopening when user mouses from popup back to source
var el = $(event.originalEvent.target);
if(!el.data('tooltip')) { // only put open delay if SAME popup not already open
ui.tooltip.hide(); // stop popup opening immediately
ttWait = setTimeout(function() { // show popup after delay
el.data("tooltip", true); // acknowledge popup open
ui.tooltip.fadeIn("400");
}, 250);
}
},
close: function (event, ui) {
var el = $(event.originalEvent.target);
el.data("tooltip", false); // acknowledge popup closed (might be over-ridden below)
clearTimeout(ttWait); // stop tooltip delay function
ui.tooltip.hover(
function() {
$(this).stop(true).fadeTo(400, 1);
el.data("tooltip", true); // acknowledge popup still open
},
function() {
$(this).fadeOut("400", function() {
$(this).remove();
});
});
}
});
Lưu ý rằng tôi cũng đã thêm một số lớp học và định vị để popup tôi để đặt dấu mũi tên để liên kết gọi. Ngoài ra, nội dung của tôi được lấy từ tệp đối tượng người dùng được tải trên trang. Tôi đã xóa những thứ này để hy vọng sẽ dễ sử dụng hơn.
Bạn có thể cung cấp bản trình diễn về vấn đề trên jsfiddle không? –
Tôi đã cập nhật câu hỏi và ví dụ được thêm vào trong jsfiddle. – Nir
http://stackoverflow.com/questions/16660576/only-close-tooltip-if-mouse-is-not-over-target-or-tooltip – apaul