commit aa881dc466e0d9b82da1fc30b736603c67b86cb9 Author: 古铜 Date: Wed Sep 24 13:37:18 2014 +0800 layer mobile 1.2 diff --git a/mobile/README.md b/mobile/README.md new file mode 100644 index 0000000..9d6747e --- /dev/null +++ b/mobile/README.md @@ -0,0 +1,14 @@ + +## layer mobole +layer mobile是为移动设备(手机、平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的layer,您需要按照场景选择使用。 + +[文档与演示](http://sentsin.com/layui/layer/) + +1. 无需依赖任何库,只加载layer.m.js即可 +2. 小巧玲珑,性能卓越、柔情似水… +3. 具备无以伦比的自适应功能 +4. 灵活的皮肤自定义支撑,充分确保弹层风格多样化 +5. 丰富、科学的接口,让弹弹弹层无所不能 + +## 备注 +[官网](http://sentsin.com/layui/layer/)、[有问必答](http://say.sentsin.com/home-48.html) \ No newline at end of file diff --git a/mobile/layer.m.dev.js b/mobile/layer.m.dev.js new file mode 100644 index 0000000..0396e8d --- /dev/null +++ b/mobile/layer.m.dev.js @@ -0,0 +1,210 @@ +/**************************************** + + @Name:layer mobile v1.2 弹层组件移动版 + @Author:贤心 + @Date:2014-09-24 + @Copyright:Sentsin Xu(贤心) + @官网:http://sentsin.com/layui/layer + @License:MIT + + */ + +;!function(win){ +"use strict"; + +var path = ''; //所在路径,如果非模块加载不用配置 +path = path ? path : document.scripts[document.scripts.length-1].src.match(/[\s\S]*\//)[0]; + +var doc = document, query = 'querySelectorAll', claname = 'getElementsByClassName', S = function(s){ + return doc[query](s); +}; + +//插入css +document.head.appendChild((function(){ + var link = doc.createElement('link'); + link.href = path + 'need/layer.css'; + link.type = 'text/css'; + link.rel = 'styleSheet' + link.id = 'layermcss'; + return link; +}())); + +//默认配置 +var config = { + type: 0, + shade: true, + shadeClose: true, + fixed: true, + anim: true +}; + +win.ready = { + extend: function(obj){ + var newobj = JSON.parse(JSON.stringify(config)); + for(var i in obj){ + newobj[i] = obj[i]; + } + return newobj; + }, + timer: {}, + end: {} +}; + +var index = 0, classs = ['layermbox'], Layer = function(options){ + var that = this; + that.config = ready.extend(options); + that.view(); +}; + +Layer.prototype.view = function(){ + var that = this, config = that.config, layerbox = doc.createElement('div'); + + that.id = layerbox.id = classs[0] + index; + layerbox.setAttribute('class', classs[0] + ' ' + classs[0]+(config.type || 0)); + layerbox.setAttribute('index', index); + + var title = (function(){ + var titype = typeof config.title === 'object'; + return config.title + ? '

'+ (titype ? config.title[0] : config.title) +'

' + : ''; + }()); + + var button = (function(){ + var btns = (config.btn || []).length, btndom; + if(btns === 0 || !config.btn){ + return ''; + } + btndom = ''+ config.btn[0] +'' + if(btns === 2){ + btndom = ''+ config.btn[1] +'' + btndom; + } + return '
'+ btndom + '
'; + }()); + + if(!config.fixed){ + config.top = config.hasOwnProperty('top') ? config.top : 100; + config.style = config.style || ''; + config.style += ' top:'+ ( doc.body.scrollTop + config.top) + 'px'; + } + + if(config.type === 2){ + config.content = '
' + (config.content||'') + '
'; + } + + layerbox.innerHTML = (config.shade ? '
' : '') + +'
' + +'
' + +'
' + + title + +'
'+ config.content +'
' + + button + +'
' + +'
' + +'
'; + + if(!config.type || config.type === 2){ + var dialogs = doc[claname](classs[0] + config.type), dialen = dialogs.length; + if(dialen >= 1){ + layer.close(dialogs[0].getAttribute('index')) + } + } + + document.body.appendChild(layerbox); + var elem = that.elem = S('#'+that.id)[0]; + setTimeout(function(){ + try{ + elem.className = elem.className + ' layermshow'; + }catch(e){ + return; + } + config.success && config.success(elem); + }, 1); + + that.index = index++; + that.action(config, elem); +}; + +Layer.prototype.action = function(config, elem){ + var that = this; + + //自动关闭 + if(config.time){ + ready.timer[that.index] = setTimeout(function(){ + layer.close(that.index); + }, config.time*1000); + } + + //关闭按钮 + if(config.title){ + elem[claname]('layermend')[0].onclick = function(){ + config.cancel && config.cancel(); + layer.close(that.index); + }; + } + + //确认取消 + if(config.btn){ + var btns = elem[claname]('layermbtn')[0].children, btnlen = btns.length; + for(var ii = 0; ii < btnlen; ii++){ + btns[ii].onclick = function(){ + var type = this.getAttribute('type'); + if(type == 0){ + config.no && config.no(); + layer.close(that.index); + } else { + config.yes ? config.yes(that.index) : layer.close(that.index); + } + }; + } + } + + //点遮罩关闭 + if(config.shade && config.shadeClose){ + var shade = elem[claname]('laymshade')[0]; + shade.onclick = function(){ + layer.close(that.index, config.end); + }; + shade.ontouchmove = function(){ + layer.close(that.index, config.end); + }; + } + + config.end && (ready.end[that.index] = config.end); +}; + +var layer = { + v: '1.2', + index: index, + + //核心方法 + open: function(options){ + var o = new Layer(options || {}); + return o.index; + }, + + close: function(index){ + var ibox = S('#'+classs[0]+index)[0]; + if(!ibox) return; + ibox.innerHTML = ''; + doc.body.removeChild(ibox); + clearTimeout(ready.timer[index]); + delete ready.timer[index]; + typeof ready.end[index] === 'function' && ready.end[index](); + delete ready.end[index]; + }, + + //关闭所有layer层 + closeAll: function(){ + var boxs = doc[claname](classs[0]); + for(var i = 0, len = boxs.length; i < len; i++){ + layer.close(boxs[i].getAttribute('index')); + } + } +}; + +"function" === typeof define ? define(function() { + return layer; +}) : win.layer = layer; + +}(window); \ No newline at end of file diff --git a/mobile/layer.m.js b/mobile/layer.m.js new file mode 100644 index 0000000..411239f --- /dev/null +++ b/mobile/layer.m.js @@ -0,0 +1,2 @@ +/*! layer mobile-v1.2 弹层组件移动版 2014-09-24 License LGPL http://sentsin.com/layui/layer/ By 贤心 */ +;!function(a){"use strict";var b="";b=b?b:document.scripts[document.scripts.length-1].src.match(/[\s\S]*\//)[0];var c=document,d="querySelectorAll",e="getElementsByClassName",f=function(a){return c[d](a)};document.head.appendChild(function(){var a=c.createElement("link");return a.href=b+"need/layer.css",a.type="text/css",a.rel="styleSheet",a.id="layermcss",a}());var g={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:!0};a.ready={extend:function(a){var b=JSON.parse(JSON.stringify(g));for(var c in a)b[c]=a[c];return b},timer:{},end:{}};var h=0,i=["layermbox"],j=function(a){var b=this;b.config=ready.extend(a),b.view()};j.prototype.view=function(){var a=this,b=a.config,d=c.createElement("div");a.id=d.id=i[0]+h,d.setAttribute("class",i[0]+" "+i[0]+(b.type||0)),d.setAttribute("index",h);var g=function(){var a="object"==typeof b.title;return b.title?'

'+(a?b.title[0]:b.title)+'

':""}(),j=function(){var a,c=(b.btn||[]).length;return 0!==c&&b.btn?(a=''+b.btn[0]+"",2===c&&(a=''+b.btn[1]+""+a),'
'+a+"
"):""}();if(b.fixed||(b.top=b.hasOwnProperty("top")?b.top:100,b.style=b.style||"",b.style+=" top:"+(c.body.scrollTop+b.top)+"px"),2===b.type&&(b.content='
'+(b.content||"")+"
"),d.innerHTML=(b.shade?'
':"")+'
"+g+'
'+b.content+"
"+j+"
",!b.type||2===b.type){var l=c[e](i[0]+b.type),m=l.length;m>=1&&k.close(l[0].getAttribute("index"))}document.body.appendChild(d);var n=a.elem=f("#"+a.id)[0];setTimeout(function(){try{n.className=n.className+" layermshow"}catch(a){return}b.success&&b.success(n)},1),a.index=h++,a.action(b,n)},j.prototype.action=function(a,b){var c=this;if(a.time&&(ready.timer[c.index]=setTimeout(function(){k.close(c.index)},1e3*a.time)),a.title&&(b[e]("layermend")[0].onclick=function(){a.cancel&&a.cancel(),k.close(c.index)}),a.btn)for(var d=b[e]("layermbtn")[0].children,f=d.length,g=0;f>g;g++)d[g].onclick=function(){var b=this.getAttribute("type");0==b?(a.no&&a.no(),k.close(c.index)):a.yes?a.yes(c.index):k.close(c.index)};if(a.shade&&a.shadeClose){var h=b[e]("laymshade")[0];h.onclick=function(){k.close(c.index,a.end)},h.ontouchmove=function(){k.close(c.index,a.end)}}a.end&&(ready.end[c.index]=a.end)};var k={v:"1.2",index:h,open:function(a){var b=new j(a||{});return b.index},close:function(a){var b=f("#"+i[0]+a)[0];b&&(b.innerHTML="",c.body.removeChild(b),clearTimeout(ready.timer[a]),delete ready.timer[a],"function"==typeof ready.end[a]&&ready.end[a](),delete ready.end[a])},closeAll:function(){for(var a=c[e](i[0]),b=0,d=a.length;d>b;b++)k.close(a[b].getAttribute("index"))}};"function"==typeof define?define(function(){return k}):a.layer=k}(window); \ No newline at end of file diff --git a/mobile/need/layer.css b/mobile/need/layer.css new file mode 100644 index 0000000..f1553d7 --- /dev/null +++ b/mobile/need/layer.css @@ -0,0 +1,44 @@ +/* layer弹层移动版样式 */ + +.layermbox{position:absolute; left:0; top:0; width:100%; z-index:19891014;} +/*.layermbox *{margin:0; bottom:0;}*/ +.layermanim{transition: all .18s; -webkit-transition: all .18s;} +.laymshade, +.layermmain{position:fixed; left:0; top:0; width:100%; height:100%;} +.laymshade{background-color:rgba(0,0,0, .5); pointer-events:auto;} +.layermmain{display:table; font-family: Helvetica, arial, sans-serif; pointer-events: none;} +.layermmain section{display:table-cell; vertical-align:middle; text-align:center;} +.layermchild{position:relative; display:inline-block; text-align:left; background-color:#fff; font-size:14px; border-radius:6px; box-shadow:0 0 8px rgba(0, 0, 0, 0.1); opacity: 0; transform: scale(0); -webkit-transform: scale(0); pointer-events:auto;} +.layermborder{border:1px solid #999;} +.layermshow .layermchild{opacity: 1; transform:scale(1); -webkit-transform: scale(1);} +.layermbox0 .layermchild{max-width:260px; min-width:150px;} +.layermbox1 .layermchild{border:none; border-radius:0;} +.layermbox2 .layermchild{width:auto; max-width:260px; min-width:40px; border:none; background-color:rgba(0,0,0,.6); color:#fff;} +.layermchild h3{padding:0 45px 0 10px; height:50px; line-height:50px; border-bottom:1px solid #EBEBEB; font-size:16px; font-weight:400; border-radius:5px 5px 0 0; border-bottom:1px solid #EBEBEB;} +.layermchild h3, +.layermbtn span{ text-overflow:ellipsis; overflow:hidden; white-space:nowrap;} +.layermcont{padding:20px 15px; line-height:22px; border-radius:5px;} +.layermbox1 .layermcont{padding:0;} +.layermbox2 .layermcont{text-align:center; padding:30px 30px 0; line-height: 0;} +.layermbox2 .layermcont i{width:1.5rem; height:1.5rem; margin-left:8px; display:inline-block; background-color:#fff; border-radius:100%;} +.layermbox2 .layermcont i{-webkit-animation: bouncedelay 1.4s infinite ease-in-out; animation: bouncedelay 1.4s infinite ease-in-out; -webkit-animation-fill-mode: both; animation-fill-mode: both;} +@-webkit-keyframes bouncedelay{ + 0%,80%,100%{-webkit-transform:scale(0)} + 40%{-webkit-transform:scale(1)} +} +@keyframes bouncedelay{ + 0%,80%,100%{transform:scale(0);-webkit-transform:scale(0)} + 40%{transform:scale(1);-webkit-transform:scale(1)} +} +.layermbox2 .layermcont i:first-child{margin-left:0; -webkit-animation-delay: -.32s; animation-delay: -.32s;} +.layermbox2 .layermcont i.laymloadtwo{-webkit-animation-delay: -.16s; animation-delay: -.16s;} +.layermbox2 .layermcont>div{line-height:22px; padding-top:7px; margin-bottom:20px; font-size: 14px;} +.layermbtn{position:relative; height:40px; line-height:40px; font-size:0; text-align:center; border-top:1px solid #EBEBEB;} +.layermbtn span{position:relative; display:inline-block; width:50%; text-align:center; font-size:14px; cursor:pointer;} +.layermbtn span:first-child{border:none; background-color:#fff} +.layermbtn:before{content:'\20'; position:absolute; width:1px; height:100%; left:50%; top:0; background-color:#EBEBEB;} +.layermend{position:absolute; right:7px; top:10px; width:30px; height:30px; border: 0; font-weight:400; background: transparent; cursor: pointer; -webkit-appearance: none; font-size:30px;} +.layermend::before, .layermend::after{position:absolute; left:5px; top:13px; content:''; width:20px; height:2px; background-color:rgba(0,0,0,.3); transform:rotate(45deg); -webkit-transform:rotate(45deg); border-radius: 3px;} +.layermend::after{transform:rotate(-45deg); -webkit-transform:rotate(-45deg);} + +