layer 弹出层组件

用于实现网页中的各种弹出层交互,如 Alert/Confirm/Message/Tips/Page/Iframe/Loading/Prompt/Tab/photo 应有尽有

示例 文档 更新日志
立即运行
下载 layer 组件 v
弹层之术
在线测试

layer 是一款多年来备受青睐的 Web 弹出层组件,具备多种交互模式。任何水平段的开发者都能使用,您的页面会因此拥有丰富友好的操作体验。

在与同类组件的选择中,layer 常一度被推荐为首选。这不仅是因为界面风格,而是它尽可能地在以更少的代码展现更强健的功能,且格外注重功能的扩展、易用和实用性,layer 甚至还兼容了包括 IE6 在内的所有浏览器。其数量可观的基础属性和方法,使得您可以自定义太多您需要的风格。

layer 采用 MIT 开源协议,是一个永久免费的公益性项目。多年来,已被广泛应用于不计其数的 Web 平台。layer 也是 Layui 的代表性组件。

先睹为快
//特别说明:事件需自己绑定,以下只展现调用代码。
 

//Alert

layer.alert('内容')

//扩展皮肤

//Confirm

layer.confirm('您是如何看待前端开发?', { btn: ['重要','奇葩'] //按钮 }, function(){ layer.msg('的确很重要', {icon: 1}); }, function(){ layer.msg('也可以这样', { time: 20000, //20s后自动关闭 btn: ['明白了', '知道了'] }); });

//Message

layer.msg('一段提示信息');

//墨绿深蓝风

layer.alert('墨绿风格,点击确认看深蓝', { skin: 'layui-layer-molv' //样式类名 ,closeBtn: 0 }, function(){ layer.alert('偶吧深蓝style', { skin: 'layui-layer-lan' ,closeBtn: 0 ,anim: 4 //动画类型 }); });

//捕获页

layer.open({ type: 1, shade: false, //title: false, //是否显示标题 content: $('.layer_notice'), //捕获的元素,注意:最好该指定的元素要存放在body最外层,否则可能被其它的相对元素所影响 cancel: function(){ layer.msg('捕获就是从页面已经存在的元素上,包裹layer的结构', {time: 5000, icon:6}); } });

//页面层

layer.open({ type: 1, skin: 'layui-layer-rim', //加上边框 area: ['420px', '240px'], //宽高 content: 'html内容' });

//自定页

layer.open({ type: 1, skin: 'layui-layer-demo', //样式类名 closeBtn: 0, //不显示关闭按钮 anim: 2, shadeClose: true, //开启遮罩关闭 content: '内容' });

//Tips

layer.tips('Hi,我是tips', '吸附元素选择器,如#id');

//iframe 层

layer.open({ type: 2, title: 'layer mobile页', shadeClose: true, shade: 0.8, area: ['380px', '90%'], content: 'mobile/' //iframe的url });

//iframe 层

layer.open({ type: 2, title: '很多时候,我们想最大化看,比如像这个页面。', shadeClose: true, shade: false, maxmin: true, //开启最大化最小化按钮 area: ['893px', '600px'], content: 'https://www.baidu.com/' });

//Loading

var index = layer.load(0, {shade: false}); //0代表加载的风格,支持0-2

//Loading层

var index = layer.load(1, { shade: [0.1,'#fff'] //0.1透明度的白色背景 });

//Tips

layer.tips('我是另外一个tips,只不过我长得跟之前那位稍有些不一样。', '吸附元素选择器', { tips: [1, '#3595CC'], time: 4000 });

//Prompt

layer.prompt({title: '输入任何口令,并确认', formType: 1}, function(pass, index){ layer.close(index); layer.prompt({title: '随便写点啥,并确认', formType: 2}, function(text, index){ layer.close(index); alert('演示完毕!您填写的的测试口令为:'+ pass +'<br>您最后写下了:'+ text); }); });

//tab 层

layer.tab({ area: ['600px', '300px'], tab: [{ title: 'TAB1', content: '内容1' }, { title: 'TAB2', content: '内容2' }, { title: 'TAB3', content: '内容3' }] });

//图片层

$.getJSON('test/photos.json?v='+new Date, function(json){ layer.photos({ photos: json //格式见API文档手册页 ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机 }); });

//显示自动关闭倒计秒数

layer.alert('在标题栏显示自动关闭倒计秒数', { time: 5*1000 ,success: function(layero, index){ var timeNum = this.time/1000, setText = function(start){ layer.title((start ? timeNum : --timeNum) + ' 秒后关闭', index); }; setText(!0); this.timer = setInterval(setText, 1000); if(timeNum <= 0) clearInterval(this.timer); } ,end: function(){ clearInterval(this.timer); } });

再试牛刀

//信息框-例1

layer.alert('见到你真的很高兴', {icon: 6});

//信息框-例2

layer.msg('一个询问测试?', { time: 0 //不自动关闭 ,btn: ['确定', '关闭'] ,yes: function(index){ layer.close(index); layer.msg('自定义按钮', { icon: 6 ,time: 0 ,btn: ['按钮-1','按钮-2','按钮-3'] }); } });

//信息框-例3

layer.msg('常用提示');

//信息框-例4

layer.msg('常用提示', {icon: 5});

//信息框-例5

layer.msg('常用提示', function(){ //关闭后的操作 });

//页面层-自定义

layer.open({ type: 1, title: false, closeBtn: 0, shadeClose: true, skin: 'yourclass', content: '自定义 HTML 内容' });

//页面层-图片

layer.open({ type: 1, title: false, closeBtn: 0, area: ['auto'], skin: 'layui-layer-nobg', //没有背景色 shadeClose: true, content: $('#tong') });

//iframe层-父子操作

layer.open({ type: 2, area: ['700px', '450px'], fixed: false, //不固定 maxmin: true, content: 'test/iframe.html' });

//iframe层-多媒体

layer.open({ type: 2, title: false, area: ['630px', '360px'], shade: 0.8, closeBtn: 0, shadeClose: true, content: '//player.youku.com/embed/XMzI1NjQyMzkwNA==' }); layer.msg('点击任意处关闭');

//iframe层-禁滚动条

layer.open({ type: 2, area: ['360px', '500px'], skin: 'layui-layer-rim', //加上边框 content: ['mobile/', 'no'] });

//加载层-默认风格

layer.load(); //此处演示关闭 setTimeout(function(){ layer.closeAll('loading'); }, 2000);

//加载层-风格2

layer.load(1); //此处演示关闭 setTimeout(function(){ layer.closeAll('loading'); }, 2000);

//加载层-风格3

layer.load(2); //此处演示关闭 setTimeout(function(){ layer.closeAll('loading'); }, 2000);

//加载层-风格4

layer.msg('加载中', { icon: 16 ,shade: 0.01 });

//打酱油

layer.msg('尼玛,打个酱油', {icon: 4});

//tips层-上

layer.tips('上', '#id或者.class', { tips: [1, '#0FA6D8'] //还可配置颜色 });

//tips层-右

layer.tips('默认就是向右的', '#id或者.class');

//tips层-下

layer.tips('下', '#id或者.class', { tips: 3 });

//tips层-左

layer.tips('左边么么哒', '#id或者.class', { tips: [4, '#78BA32'] });

//tips层-不销毁之前的

layer.tips('不销毁之前的', '#id或者.class', { tipsMore: true });

//默认prompt

layer.prompt(function(val, index){ layer.msg('得到了'+val); layer.close(index); });

//屏蔽浏览器滚动条

layer.open({ content: '浏览器滚动条已锁', scrollbar: false });

//弹出即全屏

var index = layer.open({ type: 2, content: 'https://dev.layuion.com/jump/alyhot/', area: ['320px', '195px'], maxmin: true }); layer.full(index);

//正上方

layer.msg('灵活运用 offset', { offset: 't', anim: 6 }); //更多例子 layer.msg('Hi');
余音缭绕
事实上 layer 提供的丰富的基础属性,已经足够让你的弹出层变得千变万化,请恕本页无法为您逐一演示。如果您仍觉得文档和代码有不当之处,您也可以通过 Git 平台进行反馈,相信 layer 这个小小的界面组件,能够给您的页面交互带来更多地想象和美好体验。