遇到jQuery-UI draggable微软平板Surface浏览器下不起作用,可用此方法解决。
// 扩展jQuery-UI功能,draggable在移动端浏览器不起作用解决方案,同时支持点击
// This is a fix for mobile devices
var moveFlag = 0;
// 判断是不是iPad|iPhone|Android,判断是不是微软平板Surface
(/iPad|iPhone|Android/.test(navigator.userAgent) || window.matchMedia('(pointer: coarse)').matches) && (function( $ ) {
var proto = $.ui.mouse.prototype,
_mouseInit = proto._mouseInit;
$.extend( proto, {
_mouseInit: function() {
this.element
.bind( "touchstart." + this.widgetName, $.proxy( this, "_touchStart" ) );
_mouseInit.apply( this, arguments );
},
_touchStart: function( event ) {
this.element
.bind( "touchmove." + this.widgetName, $.proxy( this, "_touchMove" ) )
.bind( "touchend." + this.widgetName, $.proxy( this, "_touchEnd" ) );
this._modifyEvent( event );
$( document ).trigger($.Event("mouseup")); //reset mouseHandled flag in ui.mouse
this._mouseDown( event );
//return false;
},
_touchMove: function( event ) {
moveFlag = 1;
this._modifyEvent( event );
this._mouseMove( event );
},
_touchEnd: function( event ) {
// dispatch the click event
if (moveFlag == 0) {
var evt = document.createEvent('Event');
evt.initEvent('click',true,true);
// this.handleElement[0].dispatchEvent(evt);
event.target.dispatchEvent(evt);
};
this.element
.unbind( "touchmove." + this.widgetName )
.unbind( "touchend." + this.widgetName );
this._mouseUp( event );
moveFlag = 0;
},
_modifyEvent: function( event ) {
event.which = 1;
var target = event.originalEvent.targetTouches[0];
event.pageX = target.clientX;
event.pageY = target.clientY;
}
});
})( jQuery );