@qingjieshouliang
Current Path : /www/wwwroot/eblliwsm.com/c7bd1a80/Extend/Tool/TPM/Tpl/Public/js/ |
Current File : /www/wwwroot/eblliwsm.com/c7bd1a80/Extend/Tool/TPM/Tpl/Public/js/desktopBrowsers.js |
//desktopBrowsers contributed by Carlos Ouro @ Badoo //translates desktop browsers events to touch events and prevents defaults //It can be used independently in other apps but it is required for using the touchLayer in the desktop ;(function ($) { var cancelClickMove=false; var preventAll = function(e) { e.preventDefault(); e.stopPropagation(); } var redirectMouseToTouch = function(type, originalEvent, newTarget) { var theTarget = newTarget ? newTarget : originalEvent.target; //stop propagation, and remove default behavior for everything but INPUT, TEXTAREA & SELECT fields if (theTarget.tagName.toUpperCase().indexOf("SELECT") == -1 && theTarget.tagName.toUpperCase().indexOf("TEXTAREA") == -1 && theTarget.tagName.toUpperCase().indexOf("INPUT") == -1) //SELECT, TEXTAREA & INPUT { // by luofei , 为了兼容iscroll 去掉原生事件的取消监听 // preventAll(originalEvent); } var touchevt = document.createEvent("Event"); touchevt.initEvent(type, true, true); if(type!='touchend'){ touchevt.touches = new Array(); touchevt.touches[0] = new Object(); touchevt.touches[0].pageX = originalEvent.pageX; touchevt.touches[0].pageY = originalEvent.pageY; //target touchevt.touches[0].target = theTarget; touchevt.changedTouches = touchevt.touches; //for jqtouch touchevt.targetTouches = touchevt.touches; //for jqtouch } //target touchevt.target = theTarget; touchevt.mouseToTouch = true; theTarget.dispatchEvent(touchevt); } var mouseDown = false, lastTarget = null,firstMove=false; if(!window.navigator.msPointerEnabled){ document.addEventListener("mousedown", function(e) { mouseDown = true; lastTarget = e.target; if(e.target.nodeName.toLowerCase()=="a"&&e.target.href.toLowerCase()=="javascript:;") e.target.href="#"; redirectMouseToTouch("touchstart", e); firstMove = true; cancelClickMove=false; }, true); document.addEventListener("mouseup", function(e) { if(!mouseDown) return; redirectMouseToTouch("touchend", e, lastTarget); //bind it to initial mousedown target lastTarget = null; mouseDown = false; }, true); document.addEventListener("mousemove", function(e) { if (!mouseDown) return; if(firstMove) return firstMove=false redirectMouseToTouch("touchmove", e); e.preventDefault(); cancelClickMove=true; }, true); } else { //Win8 document.addEventListener("MSPointerDown", function(e) { mouseDown = true; lastTarget = e.target; if(e.target.nodeName.toLowerCase()=="a"&&e.target.href.toLowerCase()=="javascript:;") e.target.href="#"; redirectMouseToTouch("touchstart", e); firstMove = true; cancelClickMove=false; // e.preventDefault();e.stopPropagation(); }, true); document.addEventListener("MSPointerUp", function(e) { if(!mouseDown) return; redirectMouseToTouch("touchend", e, lastTarget); //bind it to initial mousedown target lastTarget = null; mouseDown = false; // e.preventDefault();e.stopPropagation(); }, true); document.addEventListener("MSPointerMove", function(e) { if (!mouseDown) return; if(firstMove) return firstMove=false redirectMouseToTouch("touchmove", e); e.preventDefault(); //e.stopPropagation(); cancelClickMove=true; }, true); } //prevent all mouse events which dont exist on touch devices document.addEventListener("drag", preventAll, true); document.addEventListener("dragstart", preventAll, true); document.addEventListener("dragenter", preventAll, true); document.addEventListener("dragover", preventAll, true); document.addEventListener("dragleave", preventAll, true); document.addEventListener("dragend", preventAll, true); document.addEventListener("drop", preventAll, true); document.addEventListener("selectstart", preventAll, true); document.addEventListener("click", function(e) { if(!e.mouseToTouch&&e.target==lastTarget){ preventAll(e); } if(cancelClickMove) { preventAll(e); cancelClickMove=false; } }, true); window.addEventListener("resize",function(){ var touchevt = document.createEvent("Event"); touchevt.initEvent("orientationchange", true, true); document.dispatchEvent(touchevt); },false); })(jQuery);