2013-07-24 45 views
1

我正在测试mmenu.js(http://mmenu.frebsite.nl)作为移动网站抽屉菜单的一个选项,它效果很好,但我遇到的一个问题是尝试更新后的选项值菜单已创建。具体来说,我希望默认情况下将“dragOpen”选项设置为“true”,但希望在具有水平滚动的元素触发触摸事件时禁用它。我如何以编程方式更新jquery.mmenu.js选项?

我有另一个处理幻灯片样式元素的水平触摸滑动的插件,所以我试图利用hammer.js,它已被mmenu.js用于dragOpen事件,并将“dragOpen” “假”时,感动的目标是幻灯片容器:

$(function() { 
    var navMenuLeft = $('nav#menu-left').mmenu({ 
     position: 'left', 
     searchfield: true, 
     dragOpen: true, 
     threshold: 150 
    }); 

    $('.swiper-container').hammer().on('touch', function(event){ 
     // this triggers properly, but I seem unable to access the options for 
     // the mmenu object. If I log "navMenuLeft" it returns the #menu-left 
     // element rather than the mmenu object, so "navMenuLeft.opts" is undefined 
     console.log('touched swiper'); 
    }); 
}); 

我试过的门槛越来越高了许多比什么是需要刷卡的幻灯片大,但对幻灯片最小刷卡仍是触发dragOpen 。我已经非常彻底地搜索了文档,觉得我只是缺少一些简单的东西。或者,也许而不是改变dragOpen选项,有一种方法可以设置要从拖动到打开菜单排除的元素?

我认为dragOpen对用户体验并不重要,作为最后的手段,它只是完全禁用它,但我希望找到一个解决方案,因为可能存在其他情况下以编程方式更新不同选项也是必要的。

感谢您的帮助!

回答

0

我认为最逻辑的方法是停止拖曳事件冒泡DOM。 例如,如果你有这样的标记:

<div id="page"> 
    <p>Some text</p> 
    <div id="carousel"></div> 
    <p>Some text</p> 
</div> 

尝试停止事件冒泡超越#carousel格:

$("#carousel").on("drag", function(event) { 
    event.stopPropagation(); 
    event.gesture.stopPropagation(); 
}); 

这样一来,如果用户在该#carousel DIV拖动,拖动事件不会冒泡到#page div。

p.s.此时不可能以编程方式更新插件的选项。

0

有点晚了,但其他人是否碰到这个寻找一个答案,并绊倒像我一样,

var options = {dragLockToAxis: true}; 
       var hammertime = new Hammer($("#Draging_element"), options); 
       hammertime.on("dragleft dragright drag swipeleft swiperight touchstart",  function(ev) { 
    ev.stopPropagation(); 
}); 

你正在寻找的主要部分是hammertime.on()的所有事件。所有事件的原因是,jquery.mmenu使用几个事件在功能上触发拖动,并且您需要在所有事件上调用stopPropagation。

就像一个魅力:-) 享受

+0

它应该是'ev.srcEvent.stopPropagation();' – FidoBoy

+0

还这样可以防止子元素上水平滚动,你想完全相反...那它呢? – FidoBoy

相关问题