index.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>镜像站@下拉菜单组件</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  9. <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" tppabs="https://www.layui.com/layuiadmin/std/dist/layuiadmin/layui/css/layui.css" media="all">
  10. <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" tppabs="https://www.layui.com/layuiadmin/std/dist/layuiadmin/style/admin.css" media="all">
  11. </head>
  12. <body>
  13. <div class="layui-card layadmin-header">
  14. <div class="layui-breadcrumb" lay-filter="breadcrumb">
  15. <a lay-href="">主页</a>
  16. <a><cite>组件</cite></a>
  17. <a><cite>下拉菜单组件</cite></a>
  18. </div>
  19. </div>
  20. <div class="layui-fluid">
  21. <div class="layui-row layui-col-space15">
  22. <div class="layui-col-md12">
  23. <div class="layui-card">
  24. <div class="layui-card-header">初演示</div>
  25. <div class="layui-card-body">
  26. <div class="layui-btn-container">
  27. <button class="layui-btn test-dropdown-demo1">
  28. 下拉菜单
  29. <i class="layui-icon layui-icon-down layui-font-12"></i>
  30. </button>
  31. <button class="layui-btn layui-btn-primary test-dropdown-demo1">
  32. 下拉菜单
  33. <i class="layui-icon layui-icon-down layui-font-12"></i>
  34. </button>
  35. <button class="layui-btn" id="test-dropdown-demo100">
  36. 无限层级 + 跳转 + 事件 + 自定义模板
  37. </button>
  38. </div>
  39. <div class="layui-inline" style="width: 235px;">
  40. <input name="" placeholder="在输入框提供一些常用的选项" class="layui-input" id="test-dropdown-demo2">
  41. </div>
  42. <div class="layui-inline layui-word-aux layui-font-gray">
  43. 可以绑定任意元素,<a href="javascript:;" class="layui-font-blue" id="test-dropdown-demo3">比如这段文字 <i class="layui-icon layui-font-12 layui-icon-down"></i></a>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. <div class="layui-col-md12">
  49. <div class="layui-card">
  50. <div class="layui-card-header">在表格中的应用</div>
  51. <div class="layui-card-body">
  52. <table class="layui-hide" id="test-dropdown-table" lay-filter="test-dropdown-table"></table>
  53. <script type="text/html" id="test-dropdown-toolbar-barDemo">
  54. <a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="edit">编辑</a>
  55. <a class="layui-btn layui-btn-xs" lay-event="more">更多 <i class="layui-icon layui-icon-down"></i></a>
  56. </script>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="layui-col-md12">
  61. <div class="layui-card">
  62. <div class="layui-card-header">自定义事件</div>
  63. <div class="layui-card-body">
  64. <div class="layui-btn-container">
  65. <button class="layui-btn layui-btn-primary" id="test-dropdown-demo4">
  66. hover
  67. <i class="layui-icon layui-icon-more-vertical layui-font-12"></i>
  68. </button>
  69. <button class="layui-btn layui-btn-primary" id="test-dropdown-demo5">
  70. mousedown
  71. <i class="layui-icon layui-icon-down layui-font-12"></i>
  72. </button>
  73. <button class="layui-btn layui-btn-primary" id="test-dropdown-demo6">
  74. dblclick - 双击
  75. <i class="layui-icon layui-icon-circle layui-font-12"></i>
  76. </button>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <div class="layui-col-md12">
  82. <div class="layui-card">
  83. <div class="layui-card-header">右键菜单</div>
  84. <div class="layui-card-body">
  85. <div class="layui-bg-gray" style="height: 260px; text-align: center;" id="test-dropdown-demo7">
  86. <span class="layui-font-gray" style="position: relative; top:50%;">在此区域单击鼠标右键</span>
  87. </div>
  88. <button class="layui-btn" style="margin-top: 15px;" lay-demoactive="rightclick">
  89. 开启全局右键菜单
  90. </button>
  91. </div>
  92. </div>
  93. </div>
  94. <div class="layui-col-md12">
  95. <div class="layui-card">
  96. <div class="layui-card-header">重定义风格</div>
  97. <div class="layui-card-body">
  98. <div class="layui-btn-container">
  99. <button class="layui-btn" id="test-dropdown-demo8">
  100. 重定义样式
  101. <i class="layui-icon layui-icon-list layui-font-14"></i>
  102. </button>
  103. <style>
  104. .test-dropdown-demo,
  105. .test-dropdown-demo .layui-menu{background-color: #000; border: none;}
  106. .test-dropdown-demo .layui-menu li{color: #fff;}
  107. .test-dropdown-demo .layui-menu li:hover{background-color: #333;}
  108. </style>
  109. <button class="layui-btn" id="test-dropdown-demo9">
  110. 重定义内容
  111. <i class="layui-icon layui-icon-list layui-font-14"></i>
  112. </button>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. <script src="../../../layuiadmin/layui/layui.js" tppabs="https://www.layui.com/layuiadmin/std/dist/layuiadmin/layui/layui.js"></script>
  120. <script>
  121. layui.config({
  122. base: '../../../layuiadmin/' //静态资源所在路径
  123. }).extend({
  124. index: 'lib/index' //主入口模块
  125. }).use(['index', 'dropdown', 'util', 'layer', 'table'], function(){
  126. var dropdown = layui.dropdown
  127. ,util = layui.util
  128. ,layer = layui.layer
  129. ,table = layui.table
  130. ,$ = layui.jquery;
  131. //初演示
  132. dropdown.render({
  133. elem: '.test-dropdown-demo1'
  134. ,data: [{
  135. title: 'menu item11'
  136. ,id: 100
  137. },{
  138. title: 'menu item22'
  139. ,id: 101
  140. },{
  141. title: 'menu item33'
  142. ,id: 102
  143. }]
  144. ,click: function(obj){
  145. layer.tips('点击了:'+ obj.title, this.elem, {tips: [1, '#5FB878']})
  146. }
  147. });
  148. //初演示 - 绑定输入框
  149. dropdown.render({
  150. elem: '#test-dropdown-demo2'
  151. ,data: [{
  152. title: 'menu item 1'
  153. ,id: 101
  154. },{
  155. title: 'menu item 2'
  156. ,id: 102
  157. },{
  158. title: 'menu item 3'
  159. ,id: 103
  160. },{
  161. title: 'menu item 4'
  162. ,id: 104
  163. },{
  164. title: 'menu item 5'
  165. ,id: 105
  166. },{
  167. title: 'menu item 6'
  168. ,id: 106
  169. }]
  170. ,click: function(obj){
  171. this.elem.val(obj.title);
  172. }
  173. ,style: 'width: 235px;'
  174. });
  175. //初演示 - 绑定文字
  176. dropdown.render({
  177. elem: '#test-dropdown-demo3'
  178. ,data: [{
  179. title: 'menu item 1'
  180. ,id: 100
  181. },{
  182. title: 'menu item 2'
  183. ,id: 101
  184. ,child: [{ //横向子菜单
  185. title: 'menu item 2-1'
  186. ,id: 1011
  187. },{
  188. title: 'menu item 2-2'
  189. ,id: 1012
  190. }]
  191. },{
  192. title: 'menu item 3'
  193. ,id: 102
  194. },{
  195. type: '-' //分割线
  196. },{
  197. title: 'menu group'
  198. ,id: 103
  199. ,type: 'group' //纵向菜单组
  200. ,child: [{
  201. title: 'menu item 4-1'
  202. ,id: 1031
  203. },{
  204. title: 'menu item 4-2'
  205. ,id: 1032
  206. }]
  207. },{
  208. type: '-' //分割线
  209. },{
  210. title: 'menu item 5'
  211. ,id: 104
  212. },{
  213. title: 'menu item 5'
  214. ,id: 104
  215. }]
  216. ,click: function(obj){
  217. this.elem.val(obj.title);
  218. }
  219. });
  220. //无限层级
  221. dropdown.render({
  222. elem: '#test-dropdown-demo100'
  223. ,data: [{
  224. title: 'menu item 1'
  225. ,templet: '<i class="layui-icon layui-icon-picture"></i> {{d.title}} <span class="layui-badge-dot"></span>'
  226. ,id: 100
  227. ,href: '#'
  228. },{
  229. title: 'menu item 2'
  230. ,templet: '<img src="https://sentsin.gitee.io/res/images/demo/layer.png?t=123" style="width: 16px;"> {{d.title}}'
  231. ,id: 101
  232. ,href: '/'
  233. ,target: '_blank'
  234. }
  235. ,{type: '-'} //分割线
  236. ,{
  237. title: 'menu item 3'
  238. ,id: 102
  239. ,type: 'group'
  240. ,child: [{
  241. title: 'menu item 3-1'
  242. ,id: 103
  243. },{
  244. title: 'menu item 3-2'
  245. ,id: 104
  246. ,child: [{
  247. title: 'menu item 3-2-1'
  248. ,id: 105
  249. },{
  250. title: 'menu item 3-2-2'
  251. ,id: 11
  252. ,type: 'group'
  253. ,child: [{
  254. title: 'menu item 3-2-2-1'
  255. ,id: 111
  256. },{
  257. title: 'menu item 3-2-2-2'
  258. ,id: 1111
  259. }]
  260. },{
  261. title: 'menu item 3-2-3'
  262. ,id: 11111
  263. }]
  264. },{
  265. title: 'menu item 3-3'
  266. ,id: 111111
  267. ,type: 'group'
  268. ,child: [{
  269. title: 'menu item 3-3-1'
  270. ,id: 22
  271. },{
  272. title: 'menu item 3-3-2'
  273. ,id: 222
  274. ,child: [{
  275. title: 'menu item 3-3-2-1'
  276. ,id: 2222
  277. },{
  278. title: 'menu item 3-3-2-2'
  279. ,id: 22222
  280. },{
  281. title: 'menu item 3-3-2-3'
  282. ,id: 2222222
  283. }]
  284. },{
  285. title: 'menu item 3-3-3'
  286. ,id: 333
  287. }]
  288. }]
  289. }
  290. ,{type: '-'}
  291. ,{
  292. title: 'menu item 4'
  293. ,id: 4
  294. },{
  295. title: 'menu item 5'
  296. ,id: 5
  297. ,child: [{
  298. title: 'menu item 5-1'
  299. ,id: 55
  300. ,child: [{
  301. title: 'menu item 5-1-1'
  302. ,id: 5555
  303. },{
  304. title: 'menu item 5-1-2'
  305. ,id: 55555
  306. },{
  307. title: 'menu item 5-1-3'
  308. ,id: 555555
  309. }]
  310. },{
  311. title: 'menu item 5-2'
  312. ,id: 52
  313. },{
  314. title: 'menu item 5-3'
  315. ,id: 53
  316. }]
  317. },{type:'-'},{
  318. title: 'menu item 6'
  319. ,id: 66
  320. ,type: 'group'
  321. ,isSpreadItem: false
  322. ,child: [{
  323. title: 'menu item 6-1'
  324. ,id: 666
  325. },{
  326. title: 'menu item 6-2'
  327. ,id: 6666
  328. },{
  329. title: 'menu item 6-3'
  330. ,id: 66666
  331. }]
  332. }]
  333. ,click: function(item){
  334. layer.msg(util.escape(JSON.stringify(item)));
  335. }
  336. });
  337. // dropdown 在表格中的应用
  338. table.render({
  339. elem: '#test-dropdown-table'
  340. ,url: layui.setter.base + '/json/table/demo.js'
  341. ,title: '用户数据表'
  342. ,cols: [[
  343. {type: 'checkbox', fixed: 'left'}
  344. ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
  345. ,{field:'username', title:'用户名', width:120, edit: 'text'}
  346. ,{field:'email', title:'邮箱', minWidth:150}
  347. ,{fixed: 'right', title:'操作', toolbar: '#test-dropdown-toolbar-barDemo', width:150}
  348. ]]
  349. ,page: true
  350. });
  351. //监听行工具事件
  352. table.on('tool(test-dropdown-table)', function(obj){
  353. var that = this
  354. ,data = obj.data;
  355. if(obj.event === 'edit'){
  356. layer.prompt({
  357. formType: 2
  358. ,value: data.email
  359. }, function(value, index){
  360. obj.update({
  361. email: value
  362. });
  363. layer.close(index);
  364. });
  365. } else if(obj.event === 'more'){
  366. //更多下拉菜单
  367. dropdown.render({
  368. elem: that
  369. ,show: true //外部事件触发即显示
  370. ,data: [{
  371. title: 'item 1'
  372. ,id: 'aaa'
  373. }, {
  374. title: 'item 2'
  375. ,id: 'bbb'
  376. }, {
  377. title: '删除'
  378. ,id: 'del'
  379. }]
  380. ,click: function(data, othis){
  381. //根据 id 做出不同操作
  382. if(data.id === 'del'){
  383. layer.confirm('真的删除行么', function(index){
  384. obj.del();
  385. layer.close(index);
  386. });
  387. } else {
  388. layer.msg('得到表格下拉菜单 id:'+ data.id);
  389. }
  390. }
  391. ,style: 'margin-left: -45px; box-shadow: 1px 1px 10px rgb(0 0 0 / 12%);' //设置额外样式
  392. });
  393. }
  394. });
  395. //自定义事件 - hover
  396. dropdown.render({
  397. elem: '#test-dropdown-demo4'
  398. ,trigger: 'hover'
  399. ,data: [{
  400. title: 'menu item 1'
  401. ,id: 100
  402. },{
  403. title: 'menu item 2'
  404. ,id: 101
  405. },{
  406. title: 'menu item 3'
  407. ,id: 102
  408. }]
  409. });
  410. //自定义事件 - mousedown
  411. dropdown.render({
  412. elem: '#test-dropdown-demo5'
  413. ,trigger: 'mousedown'
  414. ,data: [{
  415. title: 'menu item 1'
  416. ,id: 100
  417. },{
  418. title: 'menu item 2'
  419. ,id: 101
  420. },{
  421. title: 'menu item 3'
  422. ,id: 102
  423. }]
  424. });
  425. //自定义事件 - dblclick
  426. dropdown.render({
  427. elem: '#test-dropdown-demo6'
  428. ,trigger: 'dblclick'
  429. ,data: [{
  430. title: 'menu item 1'
  431. ,id: 100
  432. },{
  433. title: 'menu item 2'
  434. ,id: 101
  435. },{
  436. title: 'menu item 3'
  437. ,id: 102
  438. }]
  439. });
  440. //右键菜单
  441. var inst = dropdown.render({
  442. elem: '#test-dropdown-demo7' //也可绑定到 document,从而重置整个右键
  443. ,trigger: 'contextmenu' //contextmenu
  444. ,isAllowSpread: false //禁止菜单组展开收缩
  445. ,style: 'width: 200px' //定义宽度,默认自适应
  446. ,id: 'test777' //定义唯一索引
  447. ,data: [{
  448. title: 'menu item 1'
  449. ,id: 'test'
  450. }, {
  451. title: 'Printing'
  452. ,id: 'print'
  453. },{
  454. title: 'Reload'
  455. ,id: 'reload'
  456. },{type:'-'},{
  457. title: 'menu item 3'
  458. ,id: '#3'
  459. ,child: [{
  460. title: 'menu item 3-1'
  461. ,id: '#1'
  462. },{
  463. title: 'menu item 3-2'
  464. ,id: '#2'
  465. },{
  466. title: 'menu item 3-3'
  467. ,id: '#3'
  468. }]
  469. },{type:'-'},{
  470. title: 'menu item 4'
  471. ,id: ''
  472. },{
  473. title: 'menu item 5'
  474. ,id: '#1'
  475. },{
  476. title: 'menu item 6'
  477. ,id: '#1'
  478. }]
  479. ,click: function(obj, othis){
  480. if(obj.id === 'test'){
  481. layer.msg('click');
  482. } else if(obj.id === 'print'){
  483. window.print();
  484. } else if(obj.id === 'reload'){
  485. location.reload();
  486. }
  487. }
  488. });
  489. //重定义样式
  490. dropdown.render({
  491. elem: '#test-dropdown-demo8'
  492. ,data: [{
  493. title: 'menu item 1'
  494. ,id: 100
  495. },{
  496. title: 'menu item 2'
  497. ,id: 101
  498. },{
  499. title: 'menu item 3'
  500. ,id: 103
  501. },{
  502. title: 'menu item 4'
  503. ,id: 104
  504. },{
  505. title: 'menu item 5'
  506. ,id: 105
  507. },{
  508. title: 'menu item 6'
  509. ,id: 106
  510. }]
  511. ,className: 'test-dropdown-demo'
  512. ,ready: function(elemPanel, elem){
  513. layer.msg('定义了一个 className');
  514. }
  515. });
  516. //重定义内容
  517. dropdown.render({
  518. elem: '#test-dropdown-demo9'
  519. ,content: ['<div class="layui-tab layui-tab-brief">'
  520. ,'<ul class="layui-tab-title">'
  521. ,'<li class="layui-this">Tab header 1</li>'
  522. ,'<li>Tab header 2</li>'
  523. ,'<li>Tab header 3</li>'
  524. ,'</ul>'
  525. ,'<div class="layui-tab-content">'
  526. ,'<div class="layui-tab-item layui-text layui-show"><p style="padding-bottom: 10px;">在 content 参数中插入任意的 html 内容,可替代默认的下拉菜单。 从而实现更多有趣的弹出内容。</p><p> 是否发现,dropdown 组件不仅仅只是一个下拉菜单或者右键菜单,它能被赋予许多的想象可能。</p></div>'
  527. ,'<div class="layui-tab-item">Tab body 2</div>'
  528. ,'<div class="layui-tab-item">Tab body 3</div>'
  529. ,'</div>'
  530. ,'</div>'].join('')
  531. ,style: 'width: 370px; height: 200px; padding: 0 15px; box-shadow: 1px 1px 30px rgb(0 0 0 / 12%);'
  532. ,ready: function(){
  533. layui.use('element', function(element){
  534. element.render('tab');
  535. });
  536. }
  537. });
  538. //其他操作
  539. util.event('lay-demoactive', {
  540. //全局右键菜单
  541. rightclick: function(othis){
  542. if(!othis.data('open')){
  543. dropdown.reload('test777', {
  544. elem: document //将事件直接绑定到 document
  545. });
  546. layer.msg('已开启全局右键菜单,请尝试在页面任意处单击右键。')
  547. othis.html('取消全局右键菜单');
  548. othis.data('open', true);
  549. } else {
  550. dropdown.reload('test777', {
  551. elem: '#test-dropdown-demo7' //重新绑定到指定元素上
  552. });
  553. layer.msg('已取消全局右键菜单,恢复默认右键菜单')
  554. othis.html('开启全局右键菜单');
  555. othis.data('open', false);
  556. }
  557. }
  558. })
  559. });
  560. </script>
  561. </body>
  562. </html>