Primarily I have been using it to create pauses and delays for non-animation functions, which traditionally won't respect the .delay() function in jQuery 1.4.
I created a simple plugin that generates tooltips and want it to delay 1.5 seconds before displaying the tooltip. There are many items that can trigger these tooltips, so I tried something like this inside of the plugin:
$(this).clearQueue.delay(1500).queue(function() {
// here is the hovered over element
// $(this).
$.get("/tooltip/data", {}, function(data) {
$(data).appendTo("body").fadeIn('slow');
});
});
This wasn't working however and I was seeing dozens of $.get requests being executed to my intense frustration.
Finally I figured out the problem. The queue is not universal, it's only applied to the selector. Therefore, if I want to make essentially a universal queue I need to a apply it to an element that only exists once on the page.
I changed my function.
el = $(this);
$("body").clearQueue().delay(1500).queue(function() {
// here's the hovered over element
// el.
$.get("/tooltip/data", {}, function(data) {
$(data).appendTo("body").fadeIn('slow');
});
});
Hurray No more overlapping get requests and ugly tooltip flicker nonsense!
Jamund
No comments:
Post a Comment