1 line
3.1 KiB
JavaScript
1 line
3.1 KiB
JavaScript
|
(function($){$.fn.extend({simulate:function(type,options){return this.each(function(){var opt=$.extend({},$.simulate.defaults,options||{});new $.simulate(this,type,opt)})}});$.simulate=function(el,type,options){this.target=el;this.options=options;if(/^drag$/.test(type)){this[type].apply(this,[this.target,options])}else{this.simulateEvent(el,type,options)}};$.extend($.simulate.prototype,{simulateEvent:function(el,type,options){var evt=this.createEvent(type,options);this.dispatchEvent(el,type,evt,options);return evt},createEvent:function(type,options){if(/^mouse(over|out|down|up|move)|(dbl)?click$/.test(type)){return this.mouseEvent(type,options)}else if(/^key(up|down|press)$/.test(type)){return this.keyboardEvent(type,options)}},mouseEvent:function(type,options){var evt;var e=$.extend({bubbles:true,cancelable:type!="mousemove",view:window,detail:0,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,button:0,relatedTarget:undefined},options);var relatedTarget=$(e.relatedTarget)[0];if(typeof document.createEvent==="function"){evt=document.createEvent("MouseEvents");evt.initMouseEvent(type,e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget||document.body.parentNode)}else if(document.createEventObject){evt=document.createEventObject();$.extend(evt,e);evt.button={0:1,1:4,2:2}[evt.button]||evt.button}return evt},keyboardEvent:function(type,options){var evt;var e=$.extend({bubbles:true,cancelable:true,view:window,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false,keyCode:0,charCode:0},options);if(typeof document.createEvent==="function"){try{evt=document.createEvent("KeyEvents");evt.initKeyEvent(type,e.bubbles,e.cancelable,e.view,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.keyCode,e.charCode)}catch(err){evt=document.createEvent("Events");evt.initEvent(type,e.bubbles,e.cancelable);$.extend(evt,{view:e.view,ctrlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey,metaKey:e.metaKey,keyCode:e.keyCode,charCode:e.charCode})}}else if(document.createEventObject){evt=document.createEventObject();$.extend(evt,e)}return evt},dispatchEvent:function(el,type,evt){if(el.dispatchEvent){el.dispatchEvent(evt)}else if(el.fireEvent){el.fireEvent("on"+type,evt)}return evt},drag:function(el){var self=this,center=this.findCenter(this.target),options=this.options,x=Math.floor(center.x),y=Math.floor(center.y),dx=options.dx||0,dy=options.dy||0,target=this.target;var coord={clientX:x,clientY:y};this.simulateEvent(target,"mousedown",coord);coord={clientX:x+1,clientY:y+1};this.simulateEvent(document,"mousemove",coord);coord={clientX:x+dx,clientY:y+dy};this.simulateEvent(document,"mousemove",coord);this.simulateEvent(document,"mousemove",coord);this.simulateEvent(target,"mouseup",coord)},findCenter:function(el){var el=$(this.target),o=el.offset();return{x:o.left+el.outerWidth()/2,y:o.top+el.outerHeight()/2}}});$.extend($.simulate,{defaults:{speed:"sync"},VK_TAB:9,VK_ENTER:13,VK_ESC:27,VK_PGUP:33,VK_PGDN:34,VK_END:35,VK_HOME:36,VK_LEFT:37,VK_UP:38,VK_RIGHT:39,VK_DOWN:40})})(jQuery);
|