我正在测试mmenu.js (http://mmenu.frebsite.nl)作为移动站点抽屉菜单的选项,它工作得很好,但我面临的一个问题是在创建菜单之后尝试更新选项值。具体来说,我希望在默认情况下将"dragOpen“选项设置为"true”,但希望在具有水平滚动的元素上触发触摸事件时禁用它。
我有另一个插件处理幻灯片样式元素的水平触摸滑动,因此我试图利用hammer.js ( mmenu.js已经为dragOpen事件使用了它),并将"dragOpen“更改为"false”,当触摸的目标是幻灯片容器时:
$(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对用户体验并不重要,最后只能完全禁用它,但我希望找到一个解决方案,因为在其他情况下,也需要以编程方式更新不同的选项。
谢谢你的帮助!
发布于 2014-07-09 07:28:19
有点晚了,但如果还有人像我一样在寻找答案,
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。
就像一种魅力:-)享受吧
https://stackoverflow.com/questions/17843263
复制相似问题