javascript - mootools 菜单 document.id 到 document.getElements

标签 javascript css mootools

我有一个小的 mootools 下拉菜单脚本。它适用于单个 div。 我如何按类(而不是按 id)为 wowk 修复此类并为多个菜单传递多个 div?

HTML(单一菜单):

<ul id="nav">
   <li>
     <a href="#">Link1</a>
     <ul>
        <li>
          <a href="#">Sub Link1</a>
        </li>
     </ul>
   </li>
   <li>
     <a href="#">Link2</a>
   </li>
</ul>

调用菜单类:

document.id('nav').MooDropMenu({
   onOpen: function(el){
      el.fade('in');
      el.getParent('li').addClass('dropdown');
   },
   onClose: function(el){
      el.fade('out');
      el.getParent('li').removeClass('dropdown');
   },
   onInitialize: function(el){
      el.fade('hide').set('tween', {duration:0});
   }
});

这是针对单个文档 ID 的。如何使用 .getElements() 转换多个 div 的源。

MooDropMenu 类:

var MooDropMenu = new Class({

    Implements: [Options, Events],

    options: {
        onOpen:         function(el){el.removeClass('close').addClass('open')},
        onClose:        function(el){el.removeClass('open').addClass('close')},
        onInitialize:   function(el){el.removeClass('open').addClass('close')},
        mouseoutDelay: 100,
        mouseoverDelay: 0,
        listSelector: 'ul',
        itemSelector: 'li',
        openEvent: 'mouseenter',
        closeEvent: 'mouseleave'
    },

    initialize: function(menu, options, level){
        this.setOptions(options);
        options = this.options;

        var menu = this.menu = document.id(menu);

        var that = this;

        menu.getElements(options.itemSelector + ' > ' + options.listSelector).each(function(el){

            this.fireEvent('initialize', el);

            var parent = el.getParent(options.itemSelector),
                timer;

            parent.addEvent(options.openEvent, function(){
                parent.store('DropDownOpen', true);

                clearTimeout(timer);
                if (options.mouseoverDelay) timer = this.fireEvent.delay(options.mouseoverDelay, this, ['open', el]);
                else this.fireEvent('open', el);

            }.bind(this)).addEvent(options.closeEvent, function(){
                parent.store('DropDownOpen', false);

                clearTimeout(timer);
                timer = (function(){
                    if (!parent.retrieve('DropDownOpen')) this.fireEvent('close', el);
                }).delay(options.mouseoutDelay, this);

            }.bind(this));

        }, this);
    },

    toElement: function(){
        return this.menu
    }

});

/* So you can do like this $('nav').MooDropMenu(); or even $('nav').MooDropMenu().setStyle('border',1); */
Element.implement({
    MooDropMenu: function(options){
        return this.store('MooDropMenu', new MooDropMenu(this, options));
    }
}); 

最佳答案

MooDropMenu类适用于多个下拉菜单。 只需将元素 ID 更改为类,<ul class="nav"> ,并使用:

document.getElements('.nav').MooDropMenu({

注意:记得更改 # 中的 CSS至 .还有。

Fiddle

关于javascript - mootools 菜单 document.id 到 document.getElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422024/

相关文章:

javascript - 在 mootools request.JSON 中响应状态代码为 http 200 时调用 onFailure

php - Joomla 2.5模态弹出组件表单

Javascript - 重定向到带有 POST 数据的页面

javascript - 如何在Grails中将remoteFunction值传递给Java脚本

javascript - 与 js 交换 div id 后 CSS 不起作用

html - 社交媒体图标不可见

javascript - Mootools:HtmlTable 真正多选

javascript - 如果图像响应,则获取图像的高度和宽度

javascript - 为什么 Gulp 在运行依赖它的任务之前没有完成我的 'clean' 任务?

html - 划线/删除线穿过整个 HTML 表格行