搜索组件模块
grid 栅格布局
layout admin 布局
color 颜色
iconfont 字体图标
font 字体大小 颜色
animation 动画
button 按钮
form 表单组
input 输入框
select 下拉选择框
checkbox 复选框
switch 开关
radio 单选框
textarea 文本域
nav 导航菜单
menu 基础通用菜单
breadcrumb 面包屑
tabs 选项卡
progress 进度条
panel 面板 / card
collapse 折叠面板/手风琴
table 表格元素
badge 徽章
timeline 时间线
blockquote 引用块
fieldset 字段集
hr 分割线
layer 弹出层/弹窗综合
laydate 日期时间选择器
laypage 分页
laytpl 模板引擎
table 数据表格
form 表单模块
upload 文件/图片上传
dropdown 下拉菜单
contextmenu 右键菜单
transfer 穿梭框
tree 树形菜单
colorpicker 颜色选择器
element 常用元素操作
slider 滑块
rate 评分
carousel 轮播/跑马灯
layedit 富文本编辑器
flow 信息流/图片懒加载
util 工具集
code 代码文本行修饰
layim
layuiadmin
-

下拉菜单组件文档 - layui.dropdown

dropdown 是基于 layui「基础菜单」结构衍生的多功能通用下拉菜单组件,它将原本静态呈现的菜单,通过各种事件的形式触发,从而以独立面板的形式弹出。不仅可用作常见的「下拉菜单」,更可用于「右键菜单」来实现更多的交互可能。
模块加载名称:dropdown
快速使用
  • 代码
  • 演示效果

</>code

  1. <button class="layui-btn" id="demo1">
  2. 下拉菜单
  3. <i class="layui-icon layui-icon-down layui-font-12"></i>
  4. </button>
  5. <script>
  6. layui.use('dropdown', function(){
  7. var dropdown = layui.dropdown
  8. dropdown.render({
  9. elem: '#demo1' //可绑定在任意元素中,此处以上述按钮为例
  10. ,data: [{
  11. title: 'menu item 1'
  12. ,id: 100
  13. ,href: '#'
  14. },{
  15. title: 'menu item 2'
  16. ,id: 101
  17. ,href: 'https://www.layui.com/' //开启超链接
  18. ,target: '_blank' //新窗口方式打开
  19. },{type: '-'},{
  20. title: 'menu item 3'
  21. ,id: 102
  22. ,type: 'group' //菜单类型,支持:normal/group/parent/-
  23. ,child: [{
  24. title: 'menu item 3-1'
  25. ,id: 103
  26. },{
  27. title: 'menu item 3-2'
  28. ,id: 104
  29. ,child: [{
  30. title: 'menu item 3-2-1'
  31. ,id: 105
  32. },{
  33. title: 'menu item 3-2-2'
  34. ,id: 106
  35. }]
  36. },{
  37. title: 'menu item 3-3'
  38. ,id: 107
  39. }]
  40. },{type: '-'},{
  41. title: 'menu item 4'
  42. ,id: 108
  43. },{
  44. title: 'menu item 5'
  45. ,id: 109
  46. ,child: [{
  47. title: 'menu item 5-1'
  48. ,id: 11111
  49. ,child: [{
  50. title: 'menu item 5-1-1'
  51. ,id: 2111
  52. },{
  53. title: 'menu item 5-1-2'
  54. ,id: 3111
  55. }]
  56. },{
  57. title: 'menu item 5-2'
  58. ,id: 52
  59. }]
  60. },{type:'-'},{
  61. title: 'menu item 6'
  62. ,id: 6
  63. ,type: 'group'
  64. ,isSpreadItem: false
  65. ,child: [{
  66. title: 'menu item 6-1'
  67. ,id: 61
  68. },{
  69. title: 'menu item 6-2'
  70. ,id: 62
  71. }]
  72. }]
  73. ,id: 'demo1'
  74. //菜单被点击的事件
  75. ,click: function(obj){
  76. console.log(obj);
  77. layer.msg('回调返回的参数已显示再控制台');
  78. }
  79. });
  80. });
  81. </script>
菜单列表核心的数据来自于 data 参数,详细可参加右边目录「菜单列参数」
基础参数

即核心方法 dropdown.render(options) 中的 options 对应的参数:

参数 说明 类型 默认值
elem 绑定触发组件的元素。必填项 String/DOM -
data 菜单列数据项,其参数详见下文。必填项 Array []
trigger 触发组件的事件类型。支持所有事件,如:click/hover/mousedown/contextmenu 等 String click
show 是否初始即显示组件面板 Boolean false
align 下拉面板相对绑定元素的水平对齐方式(支持: left/center/right) v2.6.8 新增 String left
isAllowSpread 是否允许菜单组展开收缩 Boolean true
isSpreadItem 是否初始展开子菜单 Boolean true
delay 延迟关闭的毫秒数。当 trigger 为 hover 时才生效 Number 300
className 自定义组件的样式类名 String -
style 设置组件的 style 属性,从而定义新的样式 String -
templet 全局定义菜单的列表模板,添加任意 html 字符,模版将被 laytpl 组件所转义,因此可通过 {{ d.title }} 的方式得到当前菜单配置的数据。#详见 String -
content 自定义组件内容,从而替代默认的菜单结构 String -
ready 组件成功弹出后的回调,并返回两个参数,如:

</>JS

  1. ready: function(elemPanel, elem){
  2. console.log(elemPanel); 得到组件面板的 DOM 对象
  3. console.log(elem); 得到基础参数 elem 所绑定的元素 DOM 对象
  4. }
Function -
click 菜单项被点击时的回调,并返回两个参数,如:

</>JS

  1. click: function(data, othis){
  2. console.log(data); 得到当前所点击的菜单项对应的数据
  3. console.log(othis); 得到当前所点击的菜单项 DOM 对象
  4. console.log(this.elem); //得到当前组件绑定的原始 DOM 对象,批量绑定中常用。
  5. }
#详细使用参见下文
Function -
菜单项参数

即上述基础参数 data 对应的参数,格式为:data: [{title: 'menu item 1', id: 1}, {}, {}]

参数 说明 类型 默认值
title 菜单标题 String -
id 菜单 ID。用户菜单项唯一索引 Number/String -
href 菜单项的超链接地址。若填写,点击菜单将直接发生跳转。 String false
target 菜单项超链接的打开方式,需 href 填写才生效。
一般可设为 _blank 或 _self 等
String _self
type 菜单项的类型,当前支持的值如下:
normal(默认)
group(垂直菜单组)
parent(横向父子菜单)
-(分割线)
String normal 或 不填
child 子级菜单数据项。参数同父级,可无限嵌套。 Array []
templet 自定义当前菜单项模板,优先级高于全局设定的 templet。详见下文。 String -
菜单项被点击的回调
  • 代码
  • 演示效果

</>code

  1. <table class="layui-table">
  2. <tbody>
  3. <tr>
  4. <td>列表 1</td>
  5. <td><button class="layui-btn layui-btn-sm demolist" data-id="111">更多操作</button></td>
  6. </tr>
  7. <tr>
  8. <td>列表 2</td>
  9. <td><button class="layui-btn layui-btn-sm demolist" data-id="222">更多操作</button></td>
  10. </tr>
  11. <tr>
  12. <td>列表 3</td>
  13. <td><button class="layui-btn layui-btn-sm demolist" data-id="333">更多操作</button></td>
  14. </tr>
  15. </tbody>
  16. </table>
  17. <script>
  18. layui.use('dropdown', function(){
  19. var dropdown = layui.dropdown
  20. ,$ = layui.jquery;
  21. dropdown.render({
  22. elem: '.demolist'
  23. ,data: [{
  24. title: 'item 1'
  25. ,id: 'aaa'
  26. }, {
  27. title: 'item 2'
  28. ,id: 'bbb'
  29. }]
  30. ,click: function(data, othis){
  31. var elem = $(this.elem)
  32. ,listId = elem.data('id'); //表格列表的预埋数据
  33. layer.msg('得到表格列表的 id:'+ listId +',下拉菜单 id:'+ data.id);
  34. }
  35. });
  36. });
  37. </script>
列表 1
列表 2
列表 3
自定义菜单项模板

通过 templet 参数即可自定义菜单项模板,其字符将被 laytpl 组件所转义,因此可通过 undefined 的方式得到当前菜单配置的数据。

</>JS

  1. var dropdown = layui.dropdown;
  2. //执行菜单
  3. dropdown.render({
  4. elem: '#id'
  5. ,data: [{
  6. title: '刷新'
  7. //当设定了模板时,菜单项将优先显示模板结构;否则将默认显示标题
  8. ,templet: '<i class="layui-icon layui-icon-refresh"></i> {{d.title}}'
  9. ,id: 100
  10. },{
  11. title: 'menu item 2'
  12. //该模板由「图片+标题+徽章」组成
  13. ,templet: '<img src="1.jpg" style="width: 16px;"> {{d.title}} <span class="layui-badge-dot"></span>'
  14. ,id: 101
  15. ,href: 'https://www.layui.com/'
  16. ,target: '_blank'
  17. },{
  18. title: 'menu item 3' //未开启模板时,默认直接显示标题
  19. ,id: 103
  20. }]
  21. })
右键菜单

当参数设定为 trigger: 'contextmenu'时,即会在所绑定的元素中屏蔽默认的右键菜单,从而呈现 dropdown 组件配置的菜单。

</>JS

  1. var dropdown = layui.dropdown;
  2. //执行菜单
  3. dropdown.render({
  4. elem: '#demo' //在 id="demo" 的元素中触发事件。也可以直接设置为 document,从而重置整个右键菜单
  5. ,trigger: 'contextmenu' //右键事件
  6. ,data: [{
  7. title: 'menu item 1'
  8. ,id: 1
  9. },{
  10. title: 'menu item 2'
  11. ,id: 'reload'
  12. },{type:'-'},{
  13. title: 'menu item 3'
  14. ,id: 3
  15. ,child: [{
  16. title: 'menu item 3-1'
  17. ,id: 31
  18. },{
  19. title: 'menu item 3-2'
  20. ,id: 32
  21. },{
  22. title: 'menu item 3-3'
  23. ,id: 33
  24. }]
  25. },{type:'-'},{
  26. title: 'menu item 4'
  27. ,id: 111
  28. },{
  29. title: 'menu item 5'
  30. ,id: 555
  31. },{
  32. title: 'menu item 6'
  33. ,id: 666
  34. }]
  35. });
结语

该组件使用非常灵活,且弹出的面板进行了坐标的科学判断(基于内部的 lay.js 模块),能始终吸附显示在最佳的位置。

layui - 在每一个细节中,用心与你沟通