簡體   English   中英

hammer.js和preventDefault();

[英]hammer.js and preventDefault();

js也支持觸摸手勢。 我正在試圖阻止默認行動。 當我設置event.preventDefaultevent.gesture.preventDefault()或甚{prevent_defaults: true }在錘子上應用參數{prevent_defaults: true } ,它只會觸發錨點上的默認操作。 我怎樣才能防止這種情況和/或我做錯了什么?!

代碼段;

function initializeNavigation() {
    $("nav").hammer({prevent_defaults: true }).on("tap", "a", function(event) {
        event.preventDefault();
        event.gesture.preventDefault();
        var target = $(this.hash);
        scrollToTarget(target, 1200);
        // if there is an open detailItem then close it.
        if (detailItemOpen) {
            $("div." + detailItemOpen).slideUp();
        }
    })

    if (Modernizr.mq('only screen and (max-width: 767px)'))  {
        initializeMobileMenuAndSetButton();
    }
}

考慮到Hammer 2.0+ event.gesture不再和Event,而是一個簡單的Object。

event.gesture.srcEvent將不是stopPropagation的正確事件,因此它不起作用。

如果您正在使用tap事件,並希望阻止文檔上的點擊/點擊,您可以執行類似的操作。 我們需要創建一個全局的tap處理程序,它將替換原始方法stopPropagationpreventDefault

 function createHandler(event) { return { isHandled: false, _shouldStopPropagation: false, _shoulePreventDefault: false, stopPropagation: event.stopPropagation.bind(event), preventDefault: event.preventDefault.bind(event), } } function handleEvent(handler, node) { let clickHandler; if (!handler.isHandled) { handler.isHandled = true; document.addEventListener('click', clickHandler = (event)=> { if (handler._shouldStopPropagation) { handler.stopPropagation(); event.stopPropagation(); } if (handler._shoulePreventDefault) { handler.preventDefault(); event.preventDefault(); } document.removeEventListener('click', clickHandler, true); }, true); } } // Create a global tap Event so we can replace the original functions document.addEventListener('tap', (event)=> { let handler = createHandler(event); event.stopPropagation = function() { handler._shouldStopPropagation = true; handleEvent(handler); }; event.preventDefault = function() { handler._shoulePreventDefault = true; handleEvent(handler); } }, true); // Now we can use it. document.addEventListener('tap', (event)=> { /* If you want to prevent Default */ event.preventDefault(); /* If you want to stop propagation */ event.stopPropagation(); /* If you want to do both */ event.preventDefault(); event.stopPropagation(); }); 

我想你也可以嘗試event.stopPropagation()event.gesture.stopPropagation() 但似乎Hammer給出了這個方法: event.gesture.stopDetect()用於類似的情況。

來源: https//github.com/hammerjs/hammer.js/wiki/Event-delegation-and-how-to-stopPropagation---preventDefaults

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM