1 ;(function( $, window ){
4 http://www.w3.org/TR/DOM-Level-3-Events/#event-type-wheel
8 $.fn.fire = function( type, opts ){
10 // translate pageX to clientX
11 if ( opts.pageX && !opts.clientX )
12 opts.clientX = opts.pageX - $( window ).scrollLeft();
13 // translate pageY to clientY
14 if ( opts.pageY && !opts.clientY )
15 opts.clientY = opts.pageY - $( window ).scrollTop();
16 // iterate the jquery collection
17 return this.each(function(){
18 // clone options uniquely for each instance
19 opts = $.extend( {}, $.fire.defaults, opts );
20 // instanitate a new event
21 new $.fire( this, type, opts );
26 $.fire = function( element, type, opts ){
27 this.element = element;
29 this.event = this.create( opts );
52 create: function( opts ){
55 opts.cancelable = false;
65 return this.mouse( opts );
69 return this.key( opts );
71 return this.event( opts );
74 event: function( opts ){
76 if ( document.createEvent ){
77 event = document.createEvent("HTMLEvents");
86 screenX: opts.screenX,
87 screenY: opts.screenY,
88 clientX: opts.clientX,
89 clientY: opts.clientY,
90 ctrlKey: opts.ctrlKey,
92 shiftKey: opts.shiftKey,
93 metaKey: opts.metaKey,
94 keyCode: opts.keyCode,
95 charCode: opts.charCode,
99 else if ( document.createEventObject ) {
100 event = $.extend( document.createEventObject(), opts );
104 mouse: function( opts ){
106 if ( document.createEvent ){
107 event = document.createEvent("MouseEvents");
108 event.initMouseEvent(
123 $( opts.relatedTarget )[0] || document.body.parentNode
126 else if ( document.createEventObject ) {
127 event = this.event();
128 event.button = { 0:1, 1:4, 2:2 }[ event.button ] || event.button;
132 key: function( opts ){
134 if ( document.createEvent ) {
136 event = document.createEvent("KeyEvents");
151 event = this.event( opts );
154 else if ( document.createEventObject ){
155 event = this.event( opts );
157 if ( $.browser.msie || $.browser.opera ){
158 event.keyCode = opts.charCode > 0 ? opts.charCode : opts.keyCode;
159 event.charCode = undefined;
163 dispatch: function(){
164 if ( this.element.dispatchEvent )
165 this.element.dispatchEvent( this.event );
166 else if ( this.element.fireEvent )
167 this.element.fireEvent( 'on'+this.type, this.event );
171 })( jQuery, window );