-

下拉菜单组件文档 - 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: 'http://layui.codeforphp.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: 'http://layui.codeforphp.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 - 在每一个细节中,用心与你沟通