layui/docs/layer/examples/more.md

170 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-primary" lay-on="test-more-max">
最大化弹出
</button>
<button type="button" class="layui-btn layui-btn-primary" lay-on="test-more-scrollbar">
弹出时屏蔽浏览器滚动条
</button>
<button type="button" class="layui-btn layui-btn-primary" lay-on="test-more-lockscreen">
页面锁屏 <span class="layui-badge-dot"></span>
</button>
<button type="button" class="layui-btn layui-btn-primary" lay-on="test-more-shade">
自定义遮罩颜色和透明度
</button>
<button type="button" class="layui-btn layui-btn-primary" lay-on="test-more-stack">
<span class="layui-badge-dot"></span> 多窗口模式 + 层叠置顶 + Esc 关闭
</button>
</div>
<style>
.class-demo-layer-lockscreen{background: url(https://unpkg.com/outeres@0.0.12/img/wallpaper/001.jpg) #16b777; background-size: cover; color: rgba(255,255,255,1);}
.class-demo-layer-lockscreen .layui-form{position: absolute; top: 50%; left: 50%; width: 300px; transform: translate(-50%, -50%);}
.class-demo-layer-lockscreen .layui-form > div{margin-bottom: 8px;}
.class-demo-layer-pin{width: 100%; height: 38px; padding: 0 8px; background-color: rgba(255,255,255,.8); border: none; border-radius: 3px; box-sizing: border-box;}
.class-demo-layer-lockscreen .layui-input-suffix{pointer-events: auto; background-color: rgba(0,0,0,.5); border-radius: 0 3px 3px 0;}
.class-demo-layer-lockscreen .layui-input-suffix .layui-icon-right{cursor: pointer; color: #fff;}
</style>
<!-- import layui -->
<script>
layui.use(function(){
var layer = layui.layer;
var util = layui.util;
var form = layui.form;
var $ = layui.$;
// 事件
util.on('lay-on', {
'test-more-max': function(){
layer.open({
type: 1,
content: '<div style="padding: 16px;">任意 HTML 内容</div>',
area: ['320px', '195px'], // 初始宽高
maxmin: true,
success: function(layero, index){
layer.full(index); // 最大化
}
});
},
'test-more-scrollbar': function(){
layer.open({
content: '浏览器滚动条已暂时屏蔽,关闭弹层后自动恢复',
scrollbar: false
});
},
'test-more-lockscreen': function(){
layer.open({
type: 1,
title: false, // 禁用标题栏
closeBtn: false, // 禁用默认关闭按钮
area: ['100%', '100%'],
scrollbar: false, // 暂时屏蔽浏览器滚动条
anim: -1, // 禁用弹出动画
isOutAnim: false, // 禁用关闭动画
id: 'ID-layer-demo-inst',
skin: 'class-demo-layer-lockscreen', // className
content: ['<div class="layui-form">',
'<div class="layui-input-wrap">',
'<input type="password" class="class-demo-layer-pin" lay-affix="eye">',
'<div class="layui-input-suffix">',
'<i class="layui-icon layui-icon-right" id="ID-layer-demo-unlock"></i>',
'</div>',
'</div>',
'<div>输入 111111 后回车,即可退出锁屏示例</div>',
'</div>'].join(''),
success: function(layero, index){
var input = layero.find('input');
var PASS = '111111';
form.render(); // 表单组件渲染
input.focus();
// 点击解锁按钮
var elemUnlock = layero.find('#ID-layer-demo-unlock');
elemUnlock.on('click', function(){
if($.trim(input[0].value) === PASS){
layer.close(index);
layer.closeLast('dialog'); // 关闭最新打开的信息框
} else {
layer.msg('锁屏密码输入有误', {offset: '16px', anim: 'slideDown'})
input.focus();
}
});
// 回车
input.on('keyup', function(e){
var elem = this;
var keyCode = e.keyCode;
if(keyCode === 13){
elemUnlock.trigger('click');
}
});
}
})
},
'test-more-shade': function(){
layer.open({
type: 1,
content: '<div style="padding: 16px;">任意 HTML 内容</div>',
area: ['320px', '195px'], // 初始宽高
shade: [0.9, '#000'],
shadeClose: true // 点击遮罩区域,关闭弹层
});
},
'test-more-stack': function(){
var that = this;
// 多窗口模式 + 层叠置顶 + Esc 关闭
layer.open({
type: 1,
title: '当你选择该窗体时即会在最顶端',
area: ['390px', '260px'],
shade: 0,
maxmin: true,
offset: [ // 为了便于演示,此处采用随机坐标
Math.random()*($(window).height()-300),
Math.random()*($(window).width()-390)
],
content: '<div style="padding: 16px;">内容标记'+ new Date().getTime() + ' ESC 键可关闭<br><br>当你的页面有很多很多 layer 窗口你需要像 Window 窗体那样点击某个窗口该窗体就置顶在上面那么 layer.setTop() 可以来轻松实现它采用巧妙的逻辑以使这种置顶的性能达到最优</div>',
btn: ['继续弹出', '全部关闭'], //只是为了演示
yes: function(){
$(that).click();
},
btn2: function(){
layer.closeAll();
},
zIndex: layer.zIndex, // 重点 1 --- 初始设置当前最高层叠顺序,
success: function(layero, index){
layer.setTop(layero); // 重点 2 --- 保持选中窗口置顶
// 记录索引,以便按 esc 键关闭。事件见代码最末尾处。
layer.escIndex = layer.escIndex || [];
layer.escIndex.unshift(index);
// 选中当前层时,将当前层索引放置在首位
layero.on('mousedown', function(){
var _index = layer.escIndex.indexOf(index);
if(_index !== -1){
layer.escIndex.splice(_index, 1); //删除原有索引
}
layer.escIndex.unshift(index); //将索引插入到数组首位
});
},
end: function(){
//更新索引
if(typeof layer.escIndex === 'object'){
layer.escIndex.splice(0, 1);
}
}
});
}
});
// 多窗口模式 - esc 键
$(document).on('keyup', function(e){
if(e.keyCode === 27){
layer.close(layer.escIndex ? layer.escIndex[0] : 0);
}
});
});
</script>