layui.define(['jquery'], function(exports) { var $ = layui.jquery var CLS_DROPDOWN = 'layui-dropdown' var CLS_DROPDOWN_RIGHT = 'layui-dropdown-direright' var CLS_SELECT = 'layui-dropdown-select' var CLS_OPTION = 'layui-dropdown-option' var CLS_TITLE = 'layui-dropdown-title' var CLS_ARROW = 'layui-dropdown-arrow-up' var HTML_DROPDOWN = '
' var DEPTH = 0 var INDEX = 0 var operationConfigData; var Class = function(config) { this.config = $.extend({}, this.config, config); this.render(config); }; Class.prototype.config = { width: 150, trigger: 'click' }; Class.prototype.dropdownElem = ''; Class.prototype.exists = false; Class.prototype.depth = 0; Class.prototype.index = 0; Class.prototype.render = function(config) { var self = this; if (typeof this.config.elem == 'string') { $(document).on('click', this.config.elem, event); } else { this.config.elem.click(event); } function event(e) { e.stopPropagation() if (self.dropdownElem == '') { INDEX += 1 self.index = INDEX var dropdown = $(HTML_DROPDOWN).attr('lay-index', self.index) $('.' + CLS_DROPDOWN + '[lay-index="' + self.index + '"]').remove() dropdown.html(self.createOptionsHtml(config)) $('body').prepend(dropdown) // dropdown.on('click', '.' + CLS_OPTION, function(e) { // e.stopPropagation() // if ($.isFunction(config.click)) { // config.click($(this).attr('lay-action'), $(this), e) // dropdown.hide() // } // }) self.dropdownElem = dropdown self.dropdownSelect = dropdown.find('.' + CLS_SELECT) } var dropdown = self.dropdownElem dropdown.css('z-index','999'); var top = $(this).offset().top + $(this).height() + 12 - $(document).scrollTop() var left = $(this).offset().left dropdown.css({ top: top - 10 }) var offsetWidth = (self.depth + 1) * self.config.width if (left + offsetWidth > $(window).width()) { dropdown .addClass('layui-dropdown-right') .css('left', left - dropdown.width() + $(this).width()) self.dropdownSelect.css({ left: 'auto', right: self.config.width }) } else { dropdown.removeClass('layui-dropdown-right').css('left', left) self.dropdownSelect.css({ right: 'auto', left: self.config.width }) } $('body').one('click', function(e) { dropdown.hide(); dropdown.css('z-index','-1'); dropdown.stop().animate( { top: '-=10', opacity: 0 }, 250 ) }); dropdown .show() .stop() .animate( { top: '+=10', opacity: 1 }, 250 ); } }; Class.prototype.createOptionsHtml = function(data, depth) { depth = depth || 0 var self = this var width = self.config.width + 'px;' var html = '
' if (depth == 0) { html += '
' } layui.each(data.options, function(i, option) { var options = option.options || []; html += '
' + '

' + '' + option.title + '

' + (options.length > 0 ? '' : ''); option.options = option.options || []; if (option.options.length > 0){ html += self.createOptionsHtml(option, depth + 1); } html += '
'; if (self.depth < depth) self.depth = depth }); html += '
'; return html }; var self = { render: function(config) { operationConfigData = config; new Class(config); } }; $(document).off("click", ".operationDropdown").on("click", ".operationDropdown", function () { var obj = $(this); var option = obj.data("option"); if(typeof operationConfigData["click"] === "function"){ operationConfigData["click"](option); } }); exports('operationDropdown', self) });