/* CursorImage класс для подвязки изображения к курсору Автор :Акниньшин Д.А. Дата :2009-03-07 e-mail :ada3000@yandex.ru Args - объект с параметрами. Параметры: imgSrc - url картинки курсора targetElt - эл-т над которым будет появляться курсор posTop - вертикальный отступ от курсора(px) posLeft - горизонтальный отступ от курсора(px) width - ширина изображения height - высота изображения className - css класс для изображения textAreaSelector- jQuery селектор, для областей, где курсор не нужен. Например текст. Пример использования: var CursorElt; ... CursorElt=new CursorImage({ imgSrc:'cursor.png', targetElt:document.body, posTop:10, posLeft:10, width:50, height:50, className:'Cursor', textAreaSelector:'.text_area' }); */ function CursorImage(Args) { if(Args==undefined) return; var me=this; var imgSrc=Args.imgSrc==undefined?'cursor.jpg':Args.imgSrc; var targetElt=Args.targetElt==undefined?$(document.body):$(Args.targetElt); var posTop=Args.posTop==undefined?10:Args.posTop; var posLeft=Args.posLeft==undefined?10:Args.posLeft; var width=Args.width==undefined?100:Args.width; var height=Args.height==undefined?10:Args.height; var className=Args.className==undefined?'':Args.className; var textAreaSelector=Args.textAreaSelector==undefined?'':Args.textAreaSelector; var allowMove=true; var elt=$(document.createElement("IMG")); var StartNext=null; var StartNextBegin=false; var Visible=false; CursorImage.prototype.StartNextFn=function(e,fn) { if(StartNext==null) { StartNext={e:e,fn:fn}; } else if(StartNext.e!=e) StartNext={e:e,fn:fn}; if(!StartNextBegin) me.AnimateEnd(); } CursorImage.prototype.AnimateEnd=function() { StartNextBegin=false; if(StartNext!=null) { if(StartNext.fn!=undefined) StartNext.fn(StartNext.e); StartNext=null; } } CursorImage.prototype.Show=function() { Visible=true; elt.show('normal',me.AnimateEnd); StartNextBegin=true; } CursorImage.prototype.Hide=function() { Visible=false; elt.hide('normal',me.AnimateEnd); StartNextBegin=true; } CursorImage.prototype.Move=function(e) { if(!allowMove) return; //alert('move'); if(!Visible) me.StartNextFn('show',me.Show); elt.css('top',(e.pageY+posTop).toString()+"px"); elt.css('left',(e.pageX+posLeft).toString()+"px"); } CursorImage.prototype.MoveText=function(e) { allowMove=false; e.stopPropagation(); e.preventDefault(); if(Visible) me.StartNextFn('hide',me.Hide); return false; } CursorImage.prototype.OverText=function(e) { return; allowMove=false; me.StartNextFn('hide',me.Hide); } CursorImage.prototype.OutText=function(e) { return; allowMove=true; me.StartNextFn('show',me.Show); } CursorImage.prototype.Over=function(e) { if(!Visible) me.StartNextFn('show',me.Show); allowMove=true; elt.css('top',(e.pageY+posTop).toString()+"px"); elt.css('left',(e.pageX+posLeft).toString()+"px"); } CursorImage.prototype.Out=function(e) { var curY=e.pageY-$(document.body).scrollTop(); var curX=e.pageX-$(document.body).scrollLeft(); if(curX<=0 || curY<=0)if(Visible) me.StartNextFn('hide',me.Hide); } CursorImage.prototype.Init=function() { elt.css('width',width); elt.css('height',height); elt.attr('className',className); elt.attr("src",imgSrc); elt.css("position","absolute"); elt.css("display","none"); elt.css("z-index","1000000"); $(document.body).append(elt); targetElt.mousemove(me.Move); targetElt.mouseover(me.Over); targetElt.mouseout(me.Out); if(textAreaSelector!='') $(textAreaSelector).live('mousemove',me.MoveText) .live('mouseover',me.OverText) .live('mouseout',me.OutText); } me.Init(); }