pull/69/head
贤心 2021-04-22 10:31:13 +08:00
parent decb04fff8
commit 1968100080
7 changed files with 141 additions and 340 deletions

View File

@ -1,231 +0,0 @@

# v3.2.0
* 优化 prompt 层初始赋值 value 时的光标会出现在最后(之前版本会在最前)
* 各项细节优化
---
# v3.1.1 2017.12.05
* 优化自动获取路径代码,以解决部分浏览器下的某些场景无法自动加载样式问题
---
# v3.1.0 2017.09.13
* 紧急修复在最新版 Chrome61.0.3163.79)下遮罩层出现的奇异花屏现象
* 修复 layer.js 未设置btnAlign时包裹按钮的 div.layui-layer-btn 出现一多余 class
* 对默认按钮颜色、Tips层、Prompt层、Tab层等进行了样式调整以便更显大气且更符合layui风格
* 增加maxHeight参数用于设定弹层的最大高度
* 去除 type:2 时如果content未填写而弹出 layer 官网的默认设置
---
# v3.0.3 2017.03.06
* 增加参数 isOutAnim用于控制是否显示关闭动画true 或者 false
* 撤销自动ready处理机制因为在初始时与Ajax同步等使用场景存在耦合等问题
* 修复Firefox下对默认层设置了高度按钮被溢出的bug
* photos层的出场动画不再是随机而是采用默认动画也可以通过参数 anim 来自定义)
* 去除photos层的默认关闭动画觉得觉得不闪眼的话也可以通过参数isOutAnim开启
---
# v3.0.2 2017.02.25
* 新增 resizing 回调,用于监听窗口的调整大小
* 增加自动ready处理机制即如果你页面一打开就执行弹层无需放入layer.ready中
* 对moveEnd回调返回一个参数为当前容器的DOM对象
* 添加一个amd条件,避免 define出错Merge pull request #42 from wangyateng/master
* 修复tab,photos,prompt弹层默认success回调被覆盖导致功能不正常的问题来自github用户 @waychan23 的友情提醒)
* 完善多按钮场景换行的间距(之前是紧贴在一起,略不雅观)
* 弹出图片层的动画时间改为800ms
* 修复按方向键切换图片层过快时重复弹出的bug
* 修复与animate.css可能存在的动画冲突
---
# v3.0 2016.11.07
* 新增拖动弹层右下角可调节弹层尺寸的功能由参数resize控制默认开启。对loading、tips层无效
* offset参数新增 t、r、b、l、lt、lb、rt、rb、的赋值可快捷实现上、右、下、左、左上角、左下角、右上角、右下角的边缘定位
* 新增btnAlign参数支持三个参数l/c/r分别用于控制按钮居左、居中、居右的快捷设置默认r即居右
* 点击最小化时,自动定位到页面左下角,在出现多个最小化时,会依次排列,这是一次较为重大的完善。
* 新增关闭层的过度动画(可通过 anim: -1 统一取消动画)
* 重写拖拽核心代码,性能大幅度提升
* layer.config核心调整
* layer.config中的extend参数只提供加载一个css皮肤文件详见文档
* 处理在head标签中执行layer弹层无效的情况
* 瘦身layer.ready方法
* 修改iframe层的loading动画
* 捕获页类型的弹层在关闭时会根据所捕获元素的初始display值进行不同处理即不再强制隐藏。
* 剔除moveType参数只提供默认的一种拖拽风格
* 剔除语义欠佳的fix参数改为fixed取代
* 剔除语义欠佳的shift参数改为anim取代不过仍然对shift参数兼容
* 完善tips层细节
* 将prompt层改成页面层结构即当你弹出prompt层时再弹出msg不会将prompt销毁。
* prompt层的textarea模式支持area参数来设定宽高
* layer.css大面积改善
* 降解IE6的fixed支持不过仍然对ie6兼容话说现在全浏览器兼容的组件已经不多了layer后续会整理出不兼容ie6/7的版本
* 修改图片超出屏幕后重新计算大小的算法Merge pull request from 390029659/master
* 修复iframe层在用于iPhone设备时无法触发滚动的Bug
---
# v2.4 2016.07.03
* 兼容jQuery3.0
* 优化tips可支持配置参数fix之前是强制fix: false用于决定是固定的tips还是非固定的。
* min回调可通过return false来设定不执行默认最小化。
* 修复在移动端使用iframeIOS下无法滑动的bug。
* 细节优化及样式微调
# 【v2.3】2016.05.18
* 通过对使用频率的调查将layer.ext.js拓展模块合并到了layer.js即不用再通过layer.config来加载调用。
* cancel回调不再对第二个按钮有效只作为右上角关闭按钮触发。并且除yes回调外所以按钮的回调都可以通过return false来设定不默认关闭。
* 修复相册层点击任意图片查看弹出的并非当前图片的bug。
* 修复相册层在移动端显示不佳的bug。
* 修复msg、alert等对话框类型的弹层在手机使用时未水平居中的bug。
# 【v2.2】2016.03.18
* 增加参数id用于控制弹层唯一标识。如不想重复弹出可设置该值。
* layer.tips允许出现遮罩即不对shade参数做限制。
* 对layer.photos方法直接弹出页面图片进行了事件委托修复了之前由于动态插入的img而无法执行弹出的bug并且修复了当图片信息改变时仍然弹出了之前的图片的bug
* layer.photos方法多处代码进行了优化
* 对layer.tab方法新增回调函数change用于监听选项卡的切换事件返回一个选项卡索引参数。
* 样式微调
# 【v2.1】2015.11.04
* 修复在使用seajs或者requirejs后layer.ext.js报layer未定义的错误。
* 修复弹出层后回车键无效的bug。
* 修复iframe层的success回调在ie8以下浏览器无效的bug
* 修复只有一张图片时并且该图片地址异常不断弹出提示的bug。
* 修复当设定moveEnd回调即便层关闭仍然触发该回调的bug
* 即便采用模块加载layer对象仍然保留全局原因是layer自有模块需要。
* 优化图标锯齿消的回调除了yes和cancel外还可用btn1/btn2。 btn2可解决取消遇右上角关闭共用cancel回调的问题。即如果你只需要接受取消的回调可以使用 btn2: function(){}
# 【v2.0】2015.09.01
* 全新的默认皮肤
* 修复按住Enter键时出现不断弹层的bug。
* 修复模块加载时layer仍然暴露给了全局的bug。
* 修复拖拽完毕回调moveEnd在层关闭后拖拽鼠标仍然触发该回调的bug。
* 确认和取消的回调除了yes和cancel外还可用btn1/btn2。 btn2可解决取消遇右上角关闭共用cancel回调的问题。即如果你只需要接受取消的回调可以使用 btn2: function(){}
### 拓展模块
* 修复通过script标签引入layer.ext.js时出现Cannot read property 'skin' of undefined的报错问题。虽然我们更推荐用layer.config()方式加载layer.ext.js
* 如果相册只有一张图片,则不触发上/下一张。
---
# 【v1.9.3】2015.05.23
* 修复全局设置皮肤时部分类型层未起作用的bug。
* 增加skin值layui-layer-rim用于给层加边框类似1.85的风格)
* 样式微调
### 拓展模块
* 修复相册层设定基础参数时只有首次有效的bug。
# 【v1.9.2】2015.05.08
* 增加关闭动画样式layui-layer-close
* 优化默认弹出动画
* 优化默认图标默认的icon支持缩减到0-6拓展皮肤可自己任意设定支持的数目
* 优化部分样式
* 机智地修复了一个隐藏得非常深的但是不是太重要的bug。
* 剔除了一些图片。
# 【v1.9.1】2015.04.29
* btn设定多个按钮时新增对应的回调支持只有yes和cancel回调,如btn: ['按钮一','按钮二','按钮三']按钮一和按钮二还是之前的yes和cancel按钮三则回调为 btn3: function(){},以此类推。
* 对cancel回调进行了微完善如果不想关闭return false即可如cancel: function(){return false},取消则不会关闭。
* 修复当设置了fix:false时,offset的设置无效的bug
* 为低版本IE回收iframe占用的内存从而修复偶尔无法获焦的bug
* 修复当设置了btn时最小化不能愉快地呈现的bug。
* 修复全局设置skin时某些层类型出现样式异常的bug。
* 修复area设置了百分比时maxmin参数无效的bug。
* 完善当采用script标签合并路径的方式引入layer加载了错误的css路径的问题。这种情况需在script标签上加一个自定义属性merge="true",然后通过layer.config({path: 'layer所在目录'})来完成初始化的配置
* 样式微调
# 【v1.9.0】2015.04.19
* 新增laye.open(options),抛弃了之前的$.layer(options)调用方法目的是与layer mobile保持统一。
* 新增layer.config(options)方法用于进行全局化配置。除了用于展现弹层的基础参数外还支持path用于模块化加载layer时设定目录以便加载所需配件如layer.config({path: '所在路径', extend: ''});
* 新增content参数用于统一传入内容。支持string类型和jquery dom对象。如果是type:2即iframe的url。
* 新增icon参数用于统一配置对话框和loading的icon类型。
* 新增cancel参数用于统一取消回调。
* 新增skin参数用于控制层的不同外观。
* 新增layer.ready(path, callback)用于页面加载时即调用弹层。如果通过layer.config配置了path此方法的path可以不填即直接layer.ready(callback);
* 新增tipsMore用于开启多个tips
* 新增scrollbar用于设定是否屏蔽浏览器滚动条
* 完善offset参数除了跟之前一样[Y坐标, X坐标],还支持传入'rd'表示右下角。另外还支持只传入Y坐标如offset: '120px'。默认'auto',即垂直水平居中。
* 完善自适应,只要设定了固定高度,任何层都会自适应出现滚动条
* 完善shift全新的CSS3动画模式支持传入0-6。
* 完善area支持传入宽度、[宽,高],默认'auto',表示自适应
* 完善time传入值改为毫秒比如2秒关闭time: 2000
* 完善use方法修复之前初始调用时部分浏览器一些不稳定因素
* 完善layer.full/layer.min方法只要传入index即可不用跟之前一样还要传入area和offset。。。
* layer.alert/confirm/msg/load/tips五种快捷引用重写更灵活更易使用。
* 剔除border参数因为它没有本质的作用自定义层样式可以通过新增的skin参数
* 剔除dialog的msgpage的html/url/dom统一采用content
* 剔除dialog和loading的type统一采用icon
* 剔除dialog中用于配置按钮数的btns因为可直接通过btn本身来获取。
* 剔除no和close回调统一采用cancel取代不过仍然对前两者兼容。
* 剔除layer.closeLoad()、layer.closeTips()方法统一用layer.closeAll('loading/tips')来对指定类型层进行关闭
* 剔除bgcolor参数因为自定义的样式一律采用skin参数控制
* 剔除tips一些列子元素只保留自身并且支持number和object形用于设定方向和显示箭头。
* 剔除layer.getIndex方法获取索引统一用返回值
* 剔除layer.autoArea方法因为已经采取更好的自适应方案。
* 默认不显示dialog图标需要显示配置dialog指定的type即可
* 很多不可见只可感受的细节改动
### 拓展模块
* layer.prompt/layer.tab/layer.photos重写代码更强健功能更强大详见Api。
总之总之…layer1.9.0有着太多的调整,爱她,就认真去感受她!么么哒
——贤心 2015/4/15
---
# 【v1.8.5】
* 新增对title样式的自定义控制
* 修复layer.prompt多行文本设置默认值无效的bug
# 【v1.8.4】
* 新增浏览器窗口尺寸改变时的自适应定位
* 新增属性shift用于配置动画弹出需要注意的是之前的layer.shift()方法将在layer1.9遗弃用shift属性取代
* 新增方法layer.title(name, index); 用于动态改变层的标题。
* 修改弹出层默认初始坐标为垂直左右居中。
* 开放多个tips可通过配置tips: {more: true}开启。
* 进一步完善tips的智能定位。
* 放弃layer.ready方法用jQuery的ready取代。
* 进一步优化内部代码
### 拓展模块
* layer.prompt支持给表单传入默认值如layer.prompt({val:'默认'}); 新增yes回调函数第二个参数为索引、第三个参数为表单元素。
* 相册层新增tab回调函数用于切换图片时进行相关操作
* 相册层内部代码优化。

View File

@ -1,17 +0,0 @@
{
"name": "layer",
"main": "src/layer.js",
"version": "3.3.0",
"homepage": "https://github.com/sentsin/layer",
"description": "Web 通用弹出层组件",
"moduleType": [
"amd",
"globals"
],
"keywords": [
"layer",
"layui",
"dialog"
],
"license": "MIT"
}

4
dist/layer.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{
"name": "layui-layer",
"name": "layui/layer",
"realname": "layer",
"version": "3.3.0",
"version": "3.4.0",
"mobile": "2.0.0",
"description": "Web 通用弹出层组件",
"main": "src/layer.js",
@ -29,6 +29,7 @@
},
"dependencies": {},
"keywords": [
"layui",
"layer",
"dialog",
"tips",

View File

@ -37,16 +37,20 @@ var isLayui = window.layui && layui.define, $, win, ready = {
return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name);
},
//载入CSS配件
//载入 CSS 依赖
link: function(href, fn, cssname){
//未设置路径则不主动加载css
if(!layer.path) return;
var head = document.getElementsByTagName("head")[0], link = document.createElement('link');
var head = document.getElementsByTagName("head")[0]
,link = document.createElement('link');
if(typeof fn === 'string') cssname = fn;
var app = (cssname || href).replace(/\.|\//g, '');
var id = 'layuicss-'+ app, timeout = 0;
var id = 'layuicss-'+ app
,STAUTS_NAME = 'creating'
,timeout = 0;
link.rel = 'stylesheet';
link.href = layer.path + href;
@ -58,19 +62,38 @@ var isLayui = window.layui && layui.define, $, win, ready = {
if(typeof fn !== 'function') return;
//轮询css是否加载完毕
(function poll() {
if(++timeout > 8 * 1000 / 100){
return window.console && console.error('layer.css: Invalid');
//轮询 css 是否加载完毕
(function poll(status) {
var delay = 100
,getLinkElem = document.getElementById(id); //获取动态插入的 link 元素
//如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范
if(++timeout > 10 * 1000 / delay){
return window.console && console.error(app +'.css: Invalid');
};
parseInt(ready.getStyle(document.getElementById(id), 'width')) === 1989 ? fn() : setTimeout(poll, 100);
//css 加载就绪
if(parseInt(ready.getStyle(getLinkElem, 'width')) === 1989){
//如果参数来自于初始轮询(即未加载就绪时的),则移除 link 标签状态
if(status === STAUTS_NAME) getLinkElem.removeAttribute('lay-status');
//如果 link 标签的状态仍为「创建中」,则继续进入轮询,直到状态改变,则执行回调
getLinkElem.getAttribute('lay-status') === STAUTS_NAME ? setTimeout(poll, delay) : fn();
} else {
getLinkElem.setAttribute('lay-status', STAUTS_NAME);
setTimeout(function(){
poll(STAUTS_NAME);
}, delay);
}
//parseInt(ready.getStyle(document.getElementById(id), 'width')) === 1989 ? fn() : setTimeout(poll, 1000);
}());
}
};
//默认内置方法。
var layer = {
v: '3.3.0',
v: '3.4.0',
ie: function(){ //ie版本
var agent = navigator.userAgent.toLowerCase();
return (!!window.ActiveXObject || "ActiveXObject" in window) ? (
@ -346,7 +369,7 @@ Class.pt.creat = function(){
}
config.time <= 0 || setTimeout(function(){
layer.close(that.index)
layer.close(that.index);
}, config.time);
that.move().callback();
@ -904,7 +927,8 @@ layer.title = function(name, index){
};
//关闭layer总方法
layer.close = function(index){
layer.close = function(index, callback){
layer.ready(function(){
var layero = $('#'+ doms[0] + index), type = layero.attr('type'), closeAnim = 'layer-anim-close';
if(!layero[0]) return;
var WRAP = 'layui-layer-wrap', remove = function(){
@ -930,6 +954,7 @@ layer.close = function(index){
}
typeof ready.end[index] === 'function' && ready.end[index]();
delete ready.end[index];
typeof callback === 'function' && callback();
};
if(layero.data('isOutAnim')){
@ -951,21 +976,30 @@ layer.close = function(index){
remove();
}, 200);
}
});
};
//关闭所有层
layer.closeAll = function(type){
$.each($('.'+doms[0]), function(){
layer.closeAll = function(type, callback){
if(typeof type === 'function'){
callback = type;
type = null;
};
layer.ready(function(){
var domsElem = $('.'+doms[0]);
$.each(domsElem, function(_index){
var othis = $(this);
var is = type ? (othis.attr('type') === type) : 1;
is && layer.close(othis.attr('times'));
is && layer.close(othis.attr('times'), _index === domsElem.length - 1 ? callback : null);
is = null;
});
if(domsElem.length === 0) typeof callback === 'function' && callback();
});
};
/**
拓展模块layui开始合并在一起
拓展模块layui 开始合并在一起
*/
@ -1093,7 +1127,7 @@ layer.photos = function(options, loop, key){
src: othis.attr('layer-src') || othis.attr('src'),
thumb: othis.attr('src')
});
})
});
};
pushData();
@ -1101,6 +1135,7 @@ layer.photos = function(options, loop, key){
if (data.length === 0) return;
loop || parent.on('click', options.img, function(){
pushData();
var othis = $(this), index = othis.attr('layer-index');
layer.photos($.extend(options, {
photos: {
@ -1110,8 +1145,7 @@ layer.photos = function(options, loop, key){
},
full: options.full
}), true);
pushData();
})
});
//不直接弹出
if(!loop) return;
@ -1167,20 +1201,22 @@ layer.photos = function(options, loop, key){
//一些动作
dict.event = function(){
/*
dict.bigimg.hover(function(){
dict.imgsee.show();
}, function(){
dict.imgsee.hide();
});
*/
dict.bigimg.find('.layui-layer-imgprev').on('click', function(event){
event.preventDefault();
dict.imgprev();
dict.imgprev(true);
});
dict.bigimg.find('.layui-layer-imgnext').on('click', function(event){
event.preventDefault();
dict.imgnext();
dict.imgnext(true);
});
$(document).on('keyup', dict.keyup);
@ -1210,6 +1246,11 @@ layer.photos = function(options, loop, key){
loadImage(data[start].src, function(img){
layer.close(dict.loadi);
//切换图片时不出现动画
if(key) options.anim = -1;
//弹出图片层
dict.index = layer.open($.extend({
type: 1,
id: 'layui-layer-photos',
@ -1239,19 +1280,24 @@ layer.photos = function(options, loop, key){
moveType: 1,
scrollbar: false,
moveOut: true,
//anim: Math.random()*5|0,
anim: 5,
isOutAnim: false,
skin: 'layui-layer-photos' + skin('photos'),
content: '<div class="layui-layer-phimg">'
+'<img src="'+ data[start].src +'" alt="'+ (data[start].alt||'') +'" layer-pid="'+ data[start].pid +'">'
+'<div class="layui-layer-imgsee">'
+(data.length > 1 ? '<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>' : '')
+'<div class="layui-layer-imgbar" style="display:'+ (key ? 'block' : '') +'"><span class="layui-layer-imgtit"><a href="javascript:;">'+ (data[start].alt||'') +'</a><em>'+ dict.imgIndex +'/'+ data.length +'</em></span></div>'
+function(){
if(data.length > 1){
return '<div class="layui-layer-imgsee">'
+'<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>'
+'<div class="layui-layer-imgbar" style="display:'+ (key ? 'block' : '') +'"><span class="layui-layer-imgtit"><a href="javascript:;">'+ (data[start].alt || '') +'</a><em>'+ dict.imgIndex +' / '+ data.length +'</em></span></div>'
+'</div>'
}
return '';
}()
+'</div>',
success: function(layero, index){
dict.bigimg = layero.find('.layui-layer-phimg');
dict.imgsee = layero.find('.layui-layer-imguide,.layui-layer-imgbar');
dict.imgsee = layero.find('.layui-layer-imgbar');
dict.event(layero);
options.tab && options.tab(data[start], layero);
typeof success === 'function' && success(layero);
@ -1286,7 +1332,7 @@ ready.run = function(_$){
//加载方式
window.layui && layui.define ? (
layer.ready()
,layui.define('jquery', function(exports){ //layui加载
,layui.define('jquery', function(exports){ //layui 加载
layer.path = layui.cache.dir;
ready.run(layui.$);
@ -1295,13 +1341,16 @@ window.layui && layui.define ? (
exports('layer', layer);
})
) : (
(typeof define === 'function' && define.amd) ? define(['jquery'], function(){ //requirejs加载
(typeof define === 'function' && define.amd) ? define(['jquery'], function(){ //requirejs 加载
ready.run(window.jQuery);
return layer;
}) : function(){ //普通script标签加载
ready.run(window.jQuery);
}) : function(){ //普通 script 标签加载
layer.ready();
ready.run(window.jQuery);
}()
);
}(window);

View File

@ -144,16 +144,15 @@ html #layuicss-layer{display: none; position: absolute; width: 1989px;}
.layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;}
/* photo模式 */
.layui-layer-photos{-webkit-animation-duration: .8s; animation-duration: .8s;}
.layui-layer-photos{background: none; box-shadow: none;}
.layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;}
.layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}
.layui-layer-imguide,.layui-layer-imgbar{display:none;}
.layui-layer-imgprev, .layui-layer-imgnext{position:absolute; top:50%; width:27px; _width:44px; height:44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());}
.layui-layer-imgprev{left:10px; background-position:-5px -5px; _background-position:-70px -5px;}
.layui-layer-imgprev, .layui-layer-imgnext{position: fixed; top: 50%; width: 27px; _width: 44px; height: 44px; margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());}
.layui-layer-imgprev{left: 30px; background-position:-5px -5px; _background-position:-70px -5px;}
.layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;}
.layui-layer-imgnext{right:10px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;}
.layui-layer-imgnext:hover{background-position:-33px -50px; _background-position:-120px -50px;}
.layui-layer-imgbar{position:absolute; left:0; bottom:0; width:100%; height:32px; line-height:32px; background-color:rgba(0,0,0,.8); background-color:#000\9; filter:Alpha(opacity=80); color:#fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}
.layui-layer-imgnext{right: 30px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;}
.layui-layer-imgnext:hover{background-position: -33px -50px; _background-position: -120px -50px;}
.layui-layer-imgbar{position: fixed; left:0; right: 0; bottom:0; width:100%; height: 40px; line-height: 40px; background-color:#000\9; filter:Alpha(opacity=60); background-color: rgba(2,0,0,.35); color: #fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}
.layui-layer-imgtit{/*position:absolute; left:20px;*/}
.layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;}
.layui-layer-imgtit a{max-width:65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;}