我剛剛得到了一個Android手機,發現拖上我的網站不能正常工作砸拖放!我明白爲什麼它不會,但有人找到了解決辦法?我正在使用JQuery來實現D ...使觸摸屏移動設備
使觸摸屏移動設備
回答
iPhone至少有某些事件,如ontouchstart,ontouchend等等。這些都是webkit的一部分,但Android的信息比iPhone要少得多。我認爲這個問題的答案是,拖放功能需要使用這些事件,而不是通常使用的事件,或者需要同時使用這兩種事件。
這篇文章可能會感興趣 - http://backtothecode.blogspot.com/2009/10/javascript-touch-and-gesture-events.html
有一個jQuery和拖放對手機的支持/觸摸屏設備插件:
http://plugins.jquery.com/project/mobiledraganddrop
在移動設備上,你點擊選取該項目,然後點擊選擇放置位置。這解決了拖動操作被設備/瀏覽器劫持的問題。
我發現,在我的Android平板電腦的觸摸屏 http://www.quirksmode.org/m/tests/drag.html 工作的範例它使用「ontouchstart事件」
舊線,我知道.......
我這裏有尊重的解決方案任何輸入或其他元素必須對可拖動元素上的「點擊」(例如輸入)做出反應。該解決方案使得能夠使用任何現有的拖放其是基於鼠標按下,鼠標移動庫和mouseup任何觸摸裝置(或cumputer)上的事件。這也是一個跨瀏覽器的解決方案。
我已經測試了幾個設備,它工作快速(結合拖放ThreeDubMedia的特徵(見http://threedubmedia.com/code/event/drag))。這是一個jQuery解決方案,因此您只能在jQuery庫中使用它。我使用了jQuery 1.5.1,因爲有些新功能在IE9和以上(沒有使用新版本的jQuery測試)無法正常工作。
在添加任何拖動或下降操作事件你必須調用這個函數首先:
simulateTouchEvents(<object>);
您還可以阻止所有組件/兒童爲輸入或加快事件處理使用以下語法:
simulateTouchEvents(<object>, true); // ignore events on childs
這是我寫的代碼。我使用了一些不錯的技巧來加速評估事物(參見代碼)。
function simulateTouchEvents(oo,bIgnoreChilds)
{
if(!$(oo)[0])
{ return false; }
if(!window.__touchTypes)
{
window.__touchTypes = {touchstart:'mousedown',touchmove:'mousemove',touchend:'mouseup'};
window.__touchInputs = {INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,'input':1,'textarea':1,'select':1,'option':1};
}
$(oo).bind('touchstart touchmove touchend', function(ev)
{
var bSame = (ev.target == this);
if(bIgnoreChilds && !bSame)
{ return; }
var b = (!bSame && ev.target.__ajqmeclk), // Get if object is already tested or input type
e = ev.originalEvent;
if(b === true || !e.touches || e.touches.length > 1 || !window.__touchTypes[e.type] )
{ return; } //allow multi-touch gestures to work
var oEv = (!bSame && typeof b != 'boolean')?$(ev.target).data('events'):false,
b = (!bSame)?(ev.target.__ajqmeclk = oEv?(oEv['click'] || oEv['mousedown'] || oEv['mouseup'] || oEv['mousemove']):false):false;
if(b || window.__touchInputs[ev.target.tagName])
{ return; } //allow default clicks to work (and on inputs)
// https://developer.mozilla.org/en/DOM/event.initMouseEvent for API
var touch = e.changedTouches[0], newEvent = document.createEvent("MouseEvent");
newEvent.initMouseEvent(window.__touchTypes[e.type], true, true, window, 1,
touch.screenX, touch.screenY,
touch.clientX, touch.clientY, false,
false, false, false, 0, null);
touch.target.dispatchEvent(newEvent);
e.preventDefault();
ev.stopImmediatePropagation();
ev.stopPropagation();
ev.preventDefault();
});
return true;
};
做些什麼: 起初,它轉換單點觸摸事件轉換成鼠標事件。它檢查事件是否由必須拖動的元素上/上的元素引起。如果它是input,textarea等input元素,它會跳過翻譯,或者如果標準鼠標事件附加到它,它也會跳過翻譯。
結果: 可拖動元素上的每個元素仍在工作。
快樂編碼,格爾茨, 歐文Haantjes
謝謝Erwin,認真的一款很棒的工具,一開始就嘗試,無需調整! 在ELO觸摸屏電腦上測試 – 2013-06-28 14:46:30
@Jonathan:很高興聽到這是有用的,謝謝! – Codebeat 2013-06-28 17:38:30
我使用jQuery UI的觸摸衝牀 - 它的工作原理是黑客鼠標按下,鼠標鬆開功能以及與touchstart替換它們,touchend等
關於: http://touchpunch.furf.com/
SCRIPT: https://raw.github.com/furf/jquery-ui-touch-punch/master/jquery.ui.touch-punch.min.js
CODE:
包括:
<script src="jquery.ui.touch-punch.min.js"></script>
在你的頭你的jQuery UI的腳本文件之後。
TouchPunch救了我的屁股。適用於iPad和Nexus 7.謝謝 – 2012-11-05 18:25:06
TouchPunch非常棒,感謝您提醒我這個庫。 – nullability 2013-02-22 17:13:14
TouchPunch真的很棒,它節省了我的一天! :) – dinodsaurus 2013-05-16 09:33:47
我用上面的touchpunch答案,它工作得很好。不過,還有一點需要注意。我發現,使用GitHub的鏈接在網站上(及以上):
SCRIPT:https://raw.github.com/furf/jquery-ui-touch-punch/master/jquery.ui.touch-punch.min.js
從網站運行的移動瀏覽器,但原始的,人類可讀的源並工作Android設備不工作。這是截至發佈日期,當然可能會得到修復,但同時它可能會爲您節省幾個調試周期。
此插件(jquery.ui.touch-punch.min.js)支持拖放觸摸移動設備。你所要做的只是在jquery和jquery ui之後加載插件。這應該適用於所有移動設備。 – varun 2014-06-26 10:20:52
- 1. 如何使用51degrees.mobi檢測觸摸屏移動設備
- 2. 觸摸屏設備的pygtk
- 3. 觸摸屏測試設備
- 4. 觸摸屏設備的「拖動」效果
- 5. 移動設備上的觸摸輸入
- 6. 模擬移動設備上的觸摸屏
- 7. Navbar不會在觸摸屏移動設備上展開
- 8. 在非觸摸屏安卓設備上模擬觸摸屏
- 9. Flex移動設備 - 來自設備的觸摸反饋
- 10. CSS - 在觸摸屏設備只
- 11. CSS懸停不被觸摸屏設備
- 12. 用於觸摸屏設備的JavaScript庫
- 13. onClick事件是否會觸摸觸摸屏設備?
- 14. Android的虛擬觸摸屏設備的多點觸摸協議
- 15. 使用觸摸ID保護設備的3D觸摸動作
- 16. 移動觸摸屏設備的ACE文本編輯器上的慢速滾動
- 17. 在移動設備上使用觸摸輸入控制玩家
- 18. jquery觸摸設備
- 19. 使活動的觸摸屏
- 20. Magic Zoom Plus打破觸摸和移動設備上的滾動
- 21. 動力學JS「點擊」或簡單的「觸摸」移動設備
- 22. 在移動設備觸摸啓動時添加CSS更改
- 23. 隱藏懸停在點擊離開觸摸屏平板電腦/移動設備
- 24. 在觸摸設備中處理滑動
- 25. 如何檢測Android設備是否被觸摸或移動
- 26. CSS:懸停/:焦點與點擊事件(移動)觸摸設備
- 27. jquery如何爲移動設備實現觸摸事件?
- 28. 移動(觸摸)設備友好的下拉菜單在css/jquery
- 29. iOS /移動設備的X/Y觸摸座標
- 30. 對移動觸摸設備(iPhone,Android,Windows)的懸停效果
標記正確的答案。 – RominaV 2016-02-05 17:56:09