javascript - Jquery 1.9.1 - move created element based on cursor position when hovering -
i need move image being created when hover on thumb while moving mouse on thumb. how can this? have function (it working):
var body = $('body'), slike = $('.oglas_slika'); function image_hover(url){ var image = '<img class="oglas_slika_velika" src="' + url +'">'; return image; } slike.hover( function(e){ body.append( image_hover( $(this).data('url') ) ); $(".oglas_slika_velika") .css("top", (e.pagey) + "px") .css("left", (e.pagex) + "px") .fadein("slow"); }, function(){ body.find('.oglas_slika_velika').remove(); } );
i tried 1 getting flickering (image appearing @ random places on page while moving mouse ):
var body = $('body'), slike = $('.oglas_slika'); function image_hover(url){ var image = '<img class="oglas_slika_velika" src="' + url +'">'; return image; } slike.hover( function(){ body.append( image_hover( $(this).data('url') ) ); $(this).on('mousemove', function(e){ $(".oglas_slika_velika") .css("top", (e.pagey) + "px") .css("left", (e.pagex) + "px") .fadein("slow"); return false; }); }, function(){ body.find('.oglas_slika_velika').remove(); } );
the flickering result of element created causing mouseout section of hover called. removing image element, , once element removed, mouseover section of hover called, , image recreated, along call fadein. animation queue overloaded in process , throws error (uncaught rangeerror: maximum call stack size exceeded
) cause extremely inconsistent results.
the remedy this, should keep track of mouseover area object:
var sp = {}; sp.top = slike.position().top; sp.left = slike.position().left; sp.right = sp.left + slike.width(); sp.bottom = sp.top + slike.height();
and keep track of image sizes:
var w; var h;
which filled once appended
body.append( image_hover( ) ); w = $(".oglas_slika_velika").width(); h = $(".oglas_slika_velika").height();
next ensure mouse cursor mousing out of hover region checking collision between created image , cursor
if( e.pagey + h > sp.bottom || e.pagey - h < sp.top){ body.find('.oglas_slika_velika').remove(); }else{ if( e.pagex + w > sp.right || e.pagex - w < sp.left ){ body.find('.oglas_slika_velika').remove(); } }
although takes more work, lot more precise , less prone error. allow image directly track mouse instead of being pushed offset.
if not important have image directly @ place of mouse, @luigi de rosa's answer work , require less effort.
Comments
Post a Comment