* http://d.hatena.ne.jp/uupaa/20100430/1272561922\r
* event.offsetX と offsetY の互換性について\r
* \r
+ * http://www.keynavi.net/ja/tipsj/gokan.html\r
+ * Safari : マウスイベントは大丈夫ですが ページ全体に対するキーイベントをきちんと扱えない問題があります。 \r
+ * その他、リンクに対するフォーカス(element.focus())の動作がおかしい、 スクリーン上のマウス位置(event.screenX/Y)をブラウザ画面の 左下隅から計算する などの問題があり修正が待たれます。 \r
+ * \r
*/\r
\r
+// http://msdn.microsoft.com/ja-jp/library/ie/dn255104%28v=vs.85%29.aspx\r
+var X_Dom_Event_devicePixelRatio = window.devicePixelRatio || ( window.screen.deviceXDPI / window.screen.logicalXDPI ),\r
+ X_Dom_Event_convertMSPointerType = window.MSPointerEvent && {\r
+ 2 : 'touch',\r
+ 3 : 'pen',\r
+ 4 : 'mouse'\r
+ };\r
+\r
if( !X.UA.IE || 9 <= X.UA.IE ){\r
X.Dom.Event = function( e, xnode ){\r
- var touch0;\r
- //this._event = e;\r
- this.type = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
- \r
- //http://www.quirksmode.org/js/events_properties.html\r
- if( e.target ){\r
- this.target = Node._getXNode( e.target.nodeType === 3 ? e.target.parentNode : e.target );// defeat Safari bug // xnode\r
- };\r
- if( e.relatedTarget ){\r
- this.relatedTarget = Node._getXNode( e.relatedTarget.nodeType === 3 ? e.relatedTarget.parentNode : e.relatedTarget ); // xnode\r
- };\r
- \r
- this.currentTarget = xnode; // xnode\r
- this.eventPhase = e.eventPhase;\r
- \r
- this.clientX = e.clientX;\r
- this.clientY = e.clientY;\r
- //this.screenX = e.screenX;\r
- //this.screenY = e.screenY;\r
- this.pageX = e.pageX;\r
- this.pageY = e.pageY;\r
- this.offsetX = e.offsetX || e.layerX || 0; // 要素上の座標を取得 \r
- this.offsetY = e.offsetY || e.layerY || 0;\r
- \r
- this.keyCode = e.keyCode;\r
- this.altKey = e.altKey;\r
- this.ctrlKey = e.ctrlKey;\r
- this.shiftKey = e.shiftKey;\r
- \r
- // http://www.programming-magic.com/20090127231544/\r
- this.which = e.which || ( e.button + 1 ); // 左:1, 中:2, 右:3\r
- this.button = e.button;\r
+ var _type = e.type,\r
+ type,\r
+ changedTouches, targetTouches, targetIDs, changedTargets, isEnd,\r
+ altKey, ctrlKey, metaKey, shiftKey, target, related,\r
+ i, n, time, touch, ev;\r
\r
- // https://developer.mozilla.org/ja/docs/DOM/DOM_event_reference/mousewheel\r
+ //this._event = e;\r
+ this.type = type = X.Dom.Event.RenameTo[ _type ] || _type;\r
\r
- // TODO\r
- // axis\r
- // https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
- // ホイール系イベント2014年版クロスブラウザ\r
- if( e.deltaY !== undefined ){\r
- this.deltaX = e.deltaX;\r
- this.deltaY = e.deltaY;\r
- } else\r
- if( e.wheelDeltaY !== undefined ){\r
- this.deltaX = e.wheelDeltaX / 120;\r
- this.deltaY = e.wheelDeltaY / 120;\r
- } else\r
- if( e.wheelDelta !== undefined ){\r
- this.deltaX = 0;\r
- this.deltaY = e.wheelDelta / -120;\r
+ // http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
+ // ポインター イベントの更新\r
+ if( e.pointerType ){\r
+ // PointerEvent;\r
+ if( X_Dom_Event_convertMSPointerType ){\r
+ this.pointerType = X_Dom_Event_convertMSPointerType[ e.pointerType ];\r
+ this.pressure = e.pressure || ( e.button !== -1 ? 0.5 : 0 );\r
+ // ポインターの接触形状の スクリーン ピクセル単位の幅と高さ なので変換。(多分、、、)\r
+ this.width = e.width / X_Dom_Event_devicePixelRatio;\r
+ this.height = e.height / X_Dom_Event_devicePixelRatio; \r
+ } else {\r
+ this.pointerType = e.pointerType;\r
+ this.pressure = e.pressure;\r
+ // ポインターの接触形状の CSS ピクセル単位の幅と高さ。\r
+ this.width = e.width;\r
+ this.height = e.height;\r
+ };\r
+\r
+ switch( this.pointerType ){\r
+ case 'pen' :\r
+ //Y-Z 平面と、ペンの軸が含まれる平面の間の角度を返します。Y 軸の範囲は -90 ~ +90 です。X の傾きの正の方向は右方向です。\r
+ this.tiltX = e.tiltX;\r
+ this.tiltY = e.tiltY;\r
+ if( _type === 'MSPointerHover' ){\r
+ this.type = 'pointermove'; // ie10 には pointerhover と pointermoveがあり、ie11 で一本化。ie11 では buttons を見て hover 状態を判定\r
+ };\r
+ case 'touch' :\r
+ this.radiusX = e.radiusX;\r
+ this.radiusY = e.radiusY;\r
+ this.rotationAngle = e.rotationAngle;\r
+ case 'mouse' :\r
+ };\r
+ \r
+ this.button = e.button;\r
+ this.buttons = e.buttons;\r
+ \r
+ this.pointerId = e.pointerId; \r
+ this.target = Node._getXNode( e.target );\r
+ this.relatedTarget = Node._getXNode( e.relatedTarget ); // xnode\r
+ this.isPrimary = e.isPrimary;\r
+ this.hwTimestamp = e.hwTimestamp;\r
+ this.timestamp = e.timestamp;\r
+\r
+ this.altKey = e.altKey;\r
+ this.ctrlKey = e.ctrlKey;\r
+ this.metaKey = e.metaKey;\r
+ this.shiftKey = e.shiftKey;\r
+ //this.screenX = touch.screenX;\r
+ //this.screenY = touch.screenY;\r
+ this.clientX = e.clientX;\r
+ this.clientY = e.clientY;\r
+ this.pageX = e.pageX;\r
+ this.pageY = e.pageY;\r
+ this.offsetX = e.offsetX;\r
+ this.offsetY = e.offsetY;\r
} else\r
- if( e.detail !== undefined ){\r
- this.deltaX = 0;\r
- this.deltaY = e.type === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
+ if( X.Dom.Event.toPointer[ _type ] ){\r
+ // Touch or Mouse\r
+ \r
+ /* e.constructor === window.TouchEvent -> e.touches for iOS3.13 */\r
+ if( touches = e.changedTouches ){\r
+ if( touches.length === 0 ){\r
+ alert( 'e.changedTouches.length === 0' );\r
+ };\r
+ xnode._cancelMouse = type;\r
+ \r
+ events = [];\r
+ altKey = e.altKey;\r
+ ctrlKey = e.ctrlKey;\r
+ metaKey = e.metaKey;\r
+ shiftKey = e.shiftKey;\r
+ time = X.getTime();\r
+ for( i = touches.length; i; ){\r
+ touch = touches[ --i ];\r
+ target = touch.target;\r
+ related = touch.relatedTarget;\r
+ events[ i ] = {\r
+ type : type,\r
+ pointerType : 'touch',\r
+ target : Node._getXNode( target.nodeType === 3 ? target.parentNode : target ),// defeat Safari bug // xnodetouch.target,\r
+ currentTarget : xnode,\r
+ relatedTarget : Node._getXNode( related.nodeType === 3 ? related.parentNode : related ), // xnode\r
+ isPrimary : true,\r
+ hwTimestamp : time,\r
+ timestamp : time,\r
+ buttons : e.button,\r
+ buttons : e.buttons || e.button,\r
+ altKey : altKey,\r
+ ctrlKey : ctrlKey,\r
+ metaKey : metaKey,\r
+ shiftKey : shiftKey,\r
+ pointerId : touch.identifier + 2,\r
+ //screenX : touch.screenX,\r
+ //screenY : touch.screenY,\r
+ clientX : touch.clientX,\r
+ clientY : touch.clientY,\r
+ pageX : touch.pageX,\r
+ pageY : touch.pageY,\r
+ offsetX : touch.offsetX, // 要素上の座標を取得 \r
+ offsetY : touch.offsetY,\r
+ radiusX : touch.radiusX || 0,\r
+ radiusY : touch.radiusY || 0,\r
+ rotationAngle : touch.rotationAngle || 0,\r
+ pressure : touch.force || touch.webkitForce || ( isEnd ? 0 : 0.5 ),\r
+ width : touch.width || 0,\r
+ height : touch.height || 0\r
+ };\r
+ };\r
+ return events.length === 1 ? events[ 0 ] : events;\r
+ } else {\r
+ \r
+ if( xnode._cancelMouse === type ){\r
+ delete xnode._cancelMouse;\r
+ return [];\r
+ };\r
+ \r
+ // MouseEvent;\r
+ this.type = type;\r
+ this.pointerType = 'mouse';\r
+ \r
+ // http://www.programming-magic.com/20090127231544/\r
+ // TODO Opera で button==2の場合、コンテキストメニューイベントを発火 「ツール」->「設定」->「詳細設定」->「コンテンツ」->「Javascriptオプション」で「右クリックを制御するスクリプトを許可する」\r
+ this.button = e.button !== undefined ? e.button :\r
+ e.which !== undefined ? e.which - 1 : -1;\r
+ this.buttons = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
+ this.pressure = ( this.button !== -1 ? 0.5 : 0 );\r
+ \r
+ elm = e.target;\r
+ this.target = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnodetouch.target;\r
+ this.isPrimary = true;\r
+ this.hwTimestamp = this.timestamp = X.getTime(); \r
+ this.altKey = e.altKey;\r
+ this.ctrlKey = e.ctrlKey;\r
+ this.metaKey = e.metaKey;\r
+ this.shiftKey = e.shiftKey;\r
+ this.pointerId = 1;\r
+ //this.screenX = touch.screenX;\r
+ //this.screenY = touch.screenY;\r
+ // TODO http://uupaa-js.googlecode.com/svn-history/r8/trunk/doc/reference/symbols/src/trunk_uu.module.ui.js.html\r
+ // Safari2ではclientX,YはpageX,Yと同じ値を返す\r
+ this.clientX = e.clientX;\r
+ this.clientY = e.clientY;\r
+ this.pageX = e.pageX;\r
+ this.pageY = e.pageY;\r
+ this.offsetX = e.offsetX || e.layerX; // 要素上の座標を取得 \r
+ this.offsetY = e.offsetY || e.layerY;\r
+ };\r
} else {\r
- this.deltaX = this.deltaY = 0;\r
- };\r
- \r
- if( /* e.constructor === window.TouchEvent || */ e.touches /* for iOS3.13 */ ){\r
- // TouchEvent\r
- this.touches = e.touches;\r
- this.changedTouches = e.changedTouches;\r
- this.targetTouches = e.targetTouches;\r
- this.metaKey = e.metaKey;\r
- this.force = e.force || e.webkitForce || 0;\r
- //\r
- if( this.touches.length ){\r
- touch0 = this.touches[ 0 ];\r
- this.clientX = touch0.clientX;\r
- this.clientY = touch0.clientY;\r
- this.pageX = touch0.pageX;\r
- this.pageY = touch0.pageY;\r
- this.offsetX = touch0.offsetX || touch0.layerX;\r
- this.offsetY = touch0.offsetY || touch0.layerY;\r
+ // Other\r
+ \r
+ this.keyCode = e.keyCode || e.which;\r
+ this.altKey = e.altKey;\r
+ this.ctrlKey = e.ctrlKey;\r
+ this.shiftKey = e.shiftKey;\r
+ this.metaKey = e.metaKey;\r
+ \r
+ this.button = e.button !== undefined ? e.button :\r
+ e.which !== undefined ? e.which - 1 : -1;\r
+ this.buttons = e.buttons !== undefined ? e.buttons : this.button === 0 ? 1 : this.button === 1 ? 2 : this.button === 2 ? 4 : 0;\r
+ \r
+ //http://www.quirksmode.org/js/events_properties.html\r
+ if( elm = e.target ){\r
+ this.target = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm );// defeat Safari bug // xnode\r
};\r
- } else\r
- if( e.constructor === window.PointerEvent ){\r
- // PointerEvent;\r
- this.currentPoint = e.currentPoint;\r
- this.width = e.width;\r
- this.height = e.height;\r
- this.timeStamp = e.timeStamp;\r
- this.hwTimestamp = e.hwTimestamp;\r
- this.intermediatePoints = e.intermediatePoints;\r
- this.isPrimary = e.isPrimary;\r
- this.pointerId = e.pointerId;\r
- this.pointerType = e.pointerType;\r
- this.pressure = e.pressure;\r
- this.tiltX = e.tiltX;\r
- this.tiltY = e.tiltY;\r
+ if( elm = e.relatedTarget ){\r
+ this.relatedTarget = Node._getXNode( elm.nodeType === 3 ? elm.parentNode : elm ); // xnode\r
+ };\r
+ \r
+ if( type === 'wheel' ){\r
+ // https://developer.mozilla.org/ja/docs/DOM/DOM_event_reference/mousewheel\r
+ // TODO axis\r
+ // https://w3g.jp/blog/tools/wheelevent_crossbrowser\r
+ // ホイール系イベント2014年版クロスブラウザ\r
+ if( e.deltaY !== undefined ){\r
+ this.deltaX = e.deltaX;\r
+ this.deltaY = e.deltaY;\r
+ this.deltaZ = e.deltaZ;\r
+ } else\r
+ if( e.wheelDeltaY !== undefined ){\r
+ this.deltaX = e.wheelDeltaX / 120;\r
+ this.deltaY = e.wheelDeltaY / 120;\r
+ this.deltaZ = e.wheelDeltaZ / 120 || 0;\r
+ } else\r
+ if( e.wheelDelta !== undefined ){\r
+ this.deltaX = this.deltaZ = 0;\r
+ this.deltaY = e.wheelDelta / -120;\r
+ } else\r
+ if( e.detail !== undefined ){\r
+ this.deltaX = this.deltaZ = 0;\r
+ this.deltaY = _type === 'MozMousePixelScroll' ? e.detail / 45 : e.detail / 3; // 3\r
+ } else {\r
+ this.deltaX = this.deltaY = this.deltaZ = 0;\r
+ };\r
+ }; \r
};\r
- };\r
- if( !window.PointerEvent && window.MSPointerEvent ){\r
- window.PointerEvent = window.MSPointerEvent;\r
+\r
+ this.currentTarget = xnode; // xnode\r
+ this.eventPhase = e.eventPhase;\r
+ this.detail = e.detail;\r
+ \r
};\r
} else {\r
- X.Dom.Event = function( e, xnode, element, opt_type ){\r
+ X.Dom.Event = function( e, xnode, element ){\r
var btn;\r
\r
- //this._event = e;\r
- this.type = X.Dom.Event.RenameTo[ e.type ] || e.type || opt_type;\r
+ this.type = X.Dom.Event.RenameTo[ e.type ] || e.type;\r
this.target = Node._getXNode( e.srcElement ); // xnode\r
if( this.target && this.target._xnodeType === 3 ) this.target = this.target.parent; // ie4 の fake Textnode がヒットしていないか?\r
this.currentTarget = xnode; // xnode\r
- this.relatedTarget = Node._getXNode( e.formElement ? e.formElement : e.toElement ); // xnode\r
+ this.relatedTarget = Node._getXNode( e.formElement || e.toElement ); // xnode\r
this.eventPhase = e.srcElement === element ? 2: 3;\r
\r
- this.clientX = e.clientX;\r
- this.clientY = e.clientY;\r
- //this.screenX = e.screenX;\r
- //this.screenY = e.screenY;\r
- \r
- if( X.Dom._root ){ // uuu...\r
- \r
- this.pageX = e.clientX + X.Dom._root.scrollLeft;\r
- this.pageY = e.clientY + X.Dom._root.scrollTop;\r
- \r
- // DOMAssistant 2.8.1\r
- //event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
- //event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); \r
- };\r
- \r
-\r
- \r
- if( 5 <= X.UA.IE ){\r
- this.offsetX = e.offsetX; // イベントターゲット左上からの座標\r
- this.offsetY = e.offsetY; \r
- }// else\r
- //if( e.srcElement ){\r
- // this.offsetX = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
- // this.offsetY = e.y - e.srcElement.offsetTop; \r
- //};\r
- \r
this.keyCode = e.keyCode;\r
this.altKey = e.altKey;\r
this.ctrlKey = e.ctrlKey;\r
- this.shiftKey = e.shiftKey;\r
- \r
+ this.shiftKey = e.shiftKey; \r
+\r
// http://www.programming-magic.com/20090127231544/\r
switch( this.type ){\r
case 'click' :\r
case 'dblclick' :\r
- this.which = 1;\r
+ this.button = 0;\r
break;\r
case 'contextmenu' :\r
- this.which = 3;\r
+ this.button = 2;\r
break;\r
default :\r
+ // mouseup, mousedown\r
btn = e.button;\r
- this.which =\r
- btn & 1 ? 1 :\r
+ this.button =\r
+ btn & 1 ? 0 :\r
btn & 4 ? 2 :\r
- btn & 2 ? 3 : 0; // 左:1(click:0), 中:4, 右:2\r
+ btn & 2 ? 1 : -1; // 左:1(click:0), 中:4, 右:2\r
+ \r
+ };\r
+ this.buttons = e.button;\r
+ \r
+ if( type = X.Dom.Event.toPointer[ e.type ] ){\r
+ this.type = type;\r
+ this.clientX = e.clientX;\r
+ this.clientY = e.clientY;\r
+ //this.screenX = e.screenX;\r
+ //this.screenY = e.screenY;\r
+ \r
+ //if( X.Dom._root ){ // uuu...\r
+ this.pageX = e.clientX + X.Dom._root.scrollLeft;\r
+ this.pageY = e.clientY + X.Dom._root.scrollTop;\r
+ // DOMAssistant 2.8.1\r
+ //event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0));\r
+ //event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); \r
+ //};\r
+\r
+ if( 5 <= X.UA.IE ){\r
+ this.offsetX = e.offsetX; // イベントターゲット左上からの座標\r
+ this.offsetY = e.offsetY; \r
+ }// else\r
+ //if( e.srcElement ){\r
+ // this.offsetX = e.x - e.srcElement.offsetLeft; // e.x はイベント発生要素の親要素を基準にした座標。\r
+ // this.offsetY = e.y - e.srcElement.offsetTop; \r
+ //};\r
+\r
+ this.deltaX = 0;\r
+ this.deltaY = e.wheelDelta / -120;\r
+ \r
+ this.pointerId = 1;\r
+ this.radiusX = 0;\r
+ this.radiusY = 0;\r
+ this.rotationAngle = 0;\r
+ this.width = 0;\r
+ this.height = 0;\r
+ this.tiltX = 0;\r
+ this.tiltY = 0;\r
};\r
- this.button = this.which - 1;\r
- this.deltaX = 0;\r
- this.deltaY = e.wheelDelta / -120;\r
- \r
- if( this.type === 'wheel' ) console.log( e.wheelDelta );\r
};\r
};\r
\r
//LINK : true\r
};\r
\r
-X.Dom.Event.Rename = {};\r
-X.Dom.Event.RenameTo = {};\r
+X.Dom.Event.Rename = {};\r
+X.Dom.Event.RenameTo = {};\r
+X.Dom.Event.toPointer = !X.Dom.EVENT_POINTER && ( X.Dom.EVENT_TOUCH ?\r
+ {\r
+ touchdown : 'pointerdown',\r
+ mousedown : 'pointerdown',\r
+ touchup : 'pointerup', \r
+ mouseup : 'pointerup',\r
+ touchmove : 'pointermove',\r
+ mousemove : 'pointermove',\r
+ touchcancel : 'pointercancel',\r
+ contextmenu : 'contextmenu',\r
+ dbclick : 'dbclick',\r
+ click : 'click',\r
+ tap : 'click'\r
+ } :\r
+ {\r
+ mousedown : 'pointerdown',\r
+ mouseup : 'pointerup',\r
+ mousemove : 'pointermove',\r
+ contextmenu : 'contextmenu',\r
+ dbclick : 'dbclick',\r
+ click : 'click'\r
+ });\r
+\r
+\r
// https://github.com/georgeadamson/jQuery.prefixfree-events/blob/master/jQuery.prefixfree-events.js\r
// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r
//\r
if( document.onwheel === undefined ){\r
// DOMMoseScroll\r
if( X.UA.Gecko && window.MouseScrollEvent ){\r
- if( 2 <= X.UA.Gecko || ( 1.9 < X.UA.Gecko && 1 <= X.UA.GeckoPatch ) ){ // Gecko 1.9.1+ (firefox3.5+)\r
+ if( 2 <= X.UA.Gecko || ( 1.9 <= X.UA.Gecko && 1 <= X.UA.GeckoPatch ) ){ // Gecko 1.9.1+ (firefox3.5+)\r
console.log( 'wheel <= MozMousePixelScroll' );\r
X.Dom.Event.Rename[ 'wheel' ] = 'MozMousePixelScroll';\r
} else\r
- if( 0.9 < X.UA.Gecko && 7 <= X.UA.GeckoPatch ){ // Gecko 0.9.7+ (NN6.2+?)\r
+ if( 1 <= X.UA.Gecko || ( 0.9 <= X.UA.Gecko && 7 <= X.UA.GeckoPatch ) ){ // Gecko 0.9.7+ (NN6.2+?)\r
console.log( 'wheel <= DOMMouseScroll' );\r
X.Dom.Event.Rename[ 'wheel' ] = 'DOMMouseScroll';\r
};\r
} else {\r
X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
};\r
- if( document.onmousewheel !== undefined ){ // Opera で判定失敗\r
- X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
- };\r
+ //if( document.onmousewheel !== undefined ){ // Opera で判定失敗する\r
+ // X.Dom.Event.Rename[ 'wheel' ] = 'mousewheel';\r
+ //};\r
};\r
\r
\r
X.Dom.Event.Rename[ 'transitionend' ] = 'mozTransitionEnd';\r
};\r
\r
-\r
-if( navigator.msPointerEnabled && !navigator.pointerEnabled ){\r
- console.log( 'pointerdown <= MSPointerDown' );\r
- X.Dom.Event.Rename[ 'pointerdown' ] = 'MSPointerDown';\r
- X.Dom.Event.Rename[ 'pointerup' ] = 'MSPointerUp';\r
- X.Dom.Event.Rename[ 'pointermove' ] = 'MSPointerMove';\r
- X.Dom.Event.Rename[ 'pointercancel' ] = 'MSPointerCancel';\r
+if( !navigator.pointerEnabled ){\r
+ if( navigator.msPointerEnabled ){\r
+ console.log( 'pointerdown <= MSPointerDown' );\r
+ X.Dom.Event.Rename[ 'pointerdown' ] = 'MSPointerDown';\r
+ X.Dom.Event.Rename[ 'pointerup' ] = 'MSPointerUp';\r
+ X.Dom.Event.Rename[ 'pointermove' ] = [ 'MSPointerMove', 'MSPointerHover' ];// ie10 と ie11 でペンのhoverevent の値が異なる\r
+ X.Dom.Event.Rename[ 'pointercancel' ] = 'MSPointerCancel';\r
+ // http://msdn.microsoft.com/ja-jp/library/ie/dn304886%28v=vs.85%29.aspx\r
+ } else\r
+ if( X.Dom.EVENT_TOUCH ){\r
+ X.Dom.Event.Rename[ 'pointerdown' ] = [ 'touchdown', 'mousedown' ];\r
+ X.Dom.Event.Rename[ 'pointerup' ] = [ 'touchup', 'mouseup' ];\r
+ X.Dom.Event.Rename[ 'pointermove' ] = [ 'touchmove', 'mousemove' ];\r
+ X.Dom.Event.Rename[ 'pointercancel' ] = 'touchcancel';\r
+ X.Dom.Event.Rename[ 'click' ] = [ 'click', 'tap' ];\r
+ } else {\r
+ X.Dom.Event.Rename[ 'pointerdown' ] = 'mousedown';\r
+ X.Dom.Event.Rename[ 'pointerup' ] = 'mouseup';\r
+ X.Dom.Event.Rename[ 'pointermove' ] = 'mousemove';\r
+ X.Dom.Event.Rename[ 'pointercancel' ] = 'mouseleave';//??\r
+ // Opera\r
+ // X.Dom.Event.Rename[ 'contextmenu' ] = 'mousedown'; button==2 の場合\r
+ };\r
};\r
\r
+\r
(function( rename, renameTo ){\r
- for( var k in rename ){\r
- renameTo[ rename[ k ] ] = k;\r
+ var k, name, i;\r
+ for( k in rename ){\r
+ name = rename[ k ];\r
+ if( X.Type.isArray( name ) ){\r
+ for( i = name.length; i; ){\r
+ renameTo[ name[ --i ] ] = k;\r
+ };\r
+ } else {\r
+ renameTo[ name ] = k;\r
+ };\r
};\r
})( X.Dom.Event.Rename, X.Dom.Event.RenameTo );\r
\r
if( 6 <= X.UA.IE && X.inHead ){\r
// if this script in Head\r
document.write( "<script id=__ie_onload defer src=javascript:void(0)><\/script>" );\r
- X.Dom._script = document.getElementById( "__ie_onload" );\r
- X.Dom._script.onreadystatechange = function(){\r
- var s = X.Dom._script;\r
+ X_TEMP._script = document.getElementById( "__ie_onload" );\r
+ X_TEMP._script.onreadystatechange = function(){\r
+ var s = X_TEMP._script;\r
if( s && s.readyState === 'complete' ){\r
s.onreadystatechange = X.emptyFunction;\r
s.onreadystatechange = null;\r
s.parentNode.removeChild( s );\r
- delete X.Dom._script;\r
+ delete X_TEMP._script;\r
X.Dom._init && X.Dom._init();\r
};\r
};\r
// Re: onLoad doesn't work with Safari?\r
// http://lists.apple.com/archives/web-dev/2003/Oct/msg00036.html\r
if( X.UA.WebKit || X.UA.Safari < 3 ){ // sniff\r
- X.Timer.add( 10, function(){\r
+ X.Timer.add( 16, function(){\r
if( !X.Dom._init ) return X.Callback.UN_LISTEN;\r
- if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return X.Dom._init();\r
+ if( document.readyState === 'loaded' || document.readyState === 'complete' ) return X.Dom._init();\r
});\r
};\r
\r