diff --git a/src/css/reset.scss b/src/css/reset.scss index c18a161..2806535 100644 --- a/src/css/reset.scss +++ b/src/css/reset.scss @@ -21,8 +21,9 @@ * 5 content list-style quotes ... 内容生成相关的属性 * */ + @font-face {font-family: "uifont"; - src: url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'); + src: url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'); } * {margin: 0;padding: 0;vertical-align: baseline;box-sizing:border-box;} @@ -55,16 +56,18 @@ a:focus,input,button:focus,input:focus {outline:none;} .do-st-hand {cursor:pointer;} [class^="do-icon-"], [class*=" do-icon-"] {display:inline-block;font-family:"uifont" !important;font-style:normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;} -.do-icon-about:before { content: "\e673"; } +.do-icon-info:before { content: "\e673"; } .do-icon-bad:before { content: "\e674"; } .do-icon-deny:before { content: "\e676"; } .do-icon-calendar:before { content: "\e675"; } .do-icon-email:before { content: "\e677"; } .do-icon-eye:before { content: "\e678"; } +.do-icon-face:before { content: "\e67c"; } .do-icon-fly:before { content: "\e679"; } .do-icon-floppy:before { content: "\e67a"; } .do-icon-good:before { content: "\e67b"; } .do-icon-headset:before { content: "\e67d"; } +.do-icon-help:before { content: "\e67e"; } .do-icon-list:before { content: "\e682"; } .do-icon-lock:before { content: "\e683"; } .do-icon-menu-left:before { content: "\e684"; } @@ -105,7 +108,7 @@ a:focus,input,button:focus,input:focus {outline:none;} .do-icon-happy:before { content: "\e6ac"; } .do-icon-share:before { content: "\e6ad"; } .do-icon-tag:before { content: "\e6ae"; } -.do-icon-app:before { content: "\e6af"; } +.do-icon-app2:before { content: "\e6af"; } .do-icon-app1:before { content: "\e6b0"; } .do-icon-logout:before { content: "\e6b1"; } .do-icon-menu-dot:before { content: "\e6b2"; } @@ -126,4 +129,5 @@ a:focus,input,button:focus,input:focus {outline:none;} .do-icon-camera:before { content: "\e6c1"; } .do-icon-live:before { content: "\e6c2"; } .do-icon-get:before { content: "\e6c3"; } -.do-icon-wrong:before { content: "\e6c4"; } \ No newline at end of file +.do-icon-wrong:before { content: "\e6c4"; } + diff --git a/src/js/layer/base.js b/src/js/layer/index.js similarity index 72% rename from src/js/layer/base.js rename to src/js/layer/index.js index a79c1b7..af2ef32 100644 --- a/src/js/layer/base.js +++ b/src/js/layer/index.js @@ -8,31 +8,32 @@ 'use strict' import 'drag/index' -import './skin/def.scss' +import './skin/default.scss' Anot.ui.layer = '1.0.0-base' + let layerDom = {} let layerObj = {} -let unique = null //储存当前打开的1/2/3类型的弹窗 +let unique = null // 储存当前打开的1/2/3类型的弹窗 let lid = 0 let defconf = { type: 1, // 弹窗类型 - skin: 'def', //默认主题 - icon: 1, //图标类型 + skin: 'default', // 默认主题 background: '#fff', - mask: true, //遮罩 - maskClose: false, //遮罩点击关闭弹窗 - radius: '0px', //弹窗圆角半径 + mask: true, // 遮罩 + maskClose: false, // 遮罩点击关闭弹窗 + radius: '0px', // 弹窗圆角半径 area: ['auto', 'auto'], - title: '提示', //弹窗主标题(在工具栏上的) - menubar: true, //是否显示菜单栏 + title: '提示', // 弹窗主标题(在工具栏上的) + menubar: true, // 是否显示菜单栏 content: '', // 弹窗的内容 - fixed: false, //是否固定不可拖拽 - offset: null, //弹窗出来时的坐标, 为数组,可有4个值,依次是 上右下左 - btns: ['确定', '取消'] //弹窗的2个按钮的文字 + fixed: false, // 是否固定不可拖拽 + shift: 'cc', // 弹窗出来的初始位置,用于出场动画 + offset: [], // 弹窗出来后的坐标, 为数组,可有4个值,依次是 上右下左 + btns: ['确定', '取消'] // 弹窗的2个按钮的文字 } const uuid = function() { - return 'layer-' + ++lid + return 'layer-' + lid++ } const close = function(id) { if (typeof id !== 'string' && typeof id !== 'number') { @@ -50,20 +51,24 @@ const close = function(id) { layerObj[id].show = false } catch (err) {} } else { + unique = null try { - // document.body.removeChild(layerDom[id][1]) - document.body.removeChild(layerDom[id][0]) - unique = null + layerDom[id][0].classList.add('shift') + layerDom[id][1].classList.add('shift') + layerDom[id][0].style.opacity = '' + layerDom[id][1].style.opacity = 0 + setTimeout(_ => { + document.body.removeChild(layerDom[id][0]) + delete layerDom[id] + delete Anot.vmodels[id] + }, 200) } catch (err) {} - - delete layerDom[id] - delete Anot.vmodels[id] } } const repeat = function(str, num) { - var idx = 0, - result = '' + let idx = 0 + let result = '' while (idx < num) { result += str idx++ @@ -77,215 +82,47 @@ const fixOffset = function(val) { return val } } -const __layer__ = function(opt) { - if (opt) { - let { yes, no, success } = opt - delete opt.yes - delete opt.no - delete opt.success - this.construct({ - state: { ...opt }, - props: { yes, no, success } - }) - .append() - .show() - } -} - -const _layer = { - alert: function(content, title, cb) { - let opt = { content, fixed: true, icon: 5 } - - if (typeof title === 'function') { - opt.yes = title - } else { - if (title) { - opt.title = title + '' - } - if (cb && typeof cb === 'function') { - opt.yes = cb - } - } - return _layer.open(opt) - }, - confirm: function(content, title, yescb, nocb) { - let opt = { content, fixed: true, icon: 0, type: 2 } - - if (typeof title === 'function') { - opt.yes = title - if (typeof yescb === 'function') { - opt.no = yescb - } - } else { - if (title) { - opt.title = title + '' - } - if (yescb && typeof yescb === 'function') { - opt.yes = yescb - } - if (nocb && typeof nocb === 'function') { - opt.no = nocb - } - } - return _layer.open(opt) - }, - toast: function(content, type, timeout, cb) { - // if (typeof opt !== 'object') { - // var tmp = opt - // opt = { timeout: 2500 } - // if (typeof tmp === 'number') { - // opt.icon = tmp - // } - // } - - if (typeof type === 'number') { - timeout = type - type = 'info' - } - - // if (!opt.hasOwnProperty('timeout')) { - // opt.timeout = 2500 - // } - - let opt = { - content: `${content}`, - menubar: false, - mask: false, - type: 7, - fixed: true - } - - opt.toast = true // toast模式 - - return _layer.open(opt) - }, - loading: function(style, time, cb) { - style = style >>> 0 - - if (typeof time === 'function') { - cb = time - time = 0 - } else { - time = time >>> 0 - if (typeof cb !== 'function') { - cb = Anot.noop - } - } - return _layer.open({ - type: 6, - load: style, - yes: cb, - timeout: time, - menubar: false, - background: 'none', - fixed: true - }) - }, - tips: function(content, container, opt) { - if (!(container instanceof HTMLElement)) { - return Anot.error('tips类型必须指定一个目标容器') - } - if (typeof opt !== 'object') { - var tmp = opt - opt = { timeout: 2500 } - if (typeof tmp === 'number') { - opt.icon = tmp - } - } - if (!opt.hasOwnProperty('timeout')) { - opt.timeout = 2500 - } - if (!opt.background) { - opt.background = 'rgba(0,0,0,.5)' - } - if (!opt.color) { - opt.color = '#fff' - } - opt.container = container - opt.content = content - opt.type = 5 - opt.icon = 0 - opt.fixed = true - opt.shade = false - opt.menubar = false - return _layer.open(opt) - }, - prompt: function(title, yescb) { - if (typeof yescb !== 'function') { - return console.error( - 'argument [callback] requires a function, but ' + - typeof yescb + - ' given' - ) - } - let opt = { - type: 3, - prompt: '', - title, - content: - '', - fixed: true, - yes: yescb - } - return _layer.open(opt) - }, - use: function(skin, callback) { - require(['css!./skin/' + skin], callback) - }, - close: close, - open: function(opt) { - if (typeof opt === 'string') { - /*opt = '$wrap-' + opt - if (!layerObj[opt]) { - throw new Error('layer实例不存在') - } else { - //只能显示一个实例 - if (layerObj[opt].show) { - return opt - } - layerObj[opt].show = true - - if (!Anot.vmodels[opt]) { - Anot(layerObj[opt].obj.init) - } - - layerObj[opt].parentElem.appendChild(layerDom[opt][1]) - layerDom[opt][1] - .querySelector('.detail') - .appendChild(layerObj[opt].wrap) - layerObj[opt].wrap.style.display = '' - // Anot.scan(layerDom[opt][1]) - layerObj[opt].obj.show() - return opt - }*/ - } else { - return new __layer__(opt).init.$id - } - }, - version: Anot.ui.layer -} - -/*type: { // 弹窗类型对应的id值 - 1: 'alert', - 2: 'confirm', - 3: 'prompt', - 4: 'iframe', - 5: 'tips', - 6: 'loading', - 7: 'msg', - }*/ -__layer__.prototype = { - dot: { +/* type: { // 弹窗类型对应的id值 + 1: 'alert', + 2: 'confirm', + 3: 'prompt', + 4: 'iframe', + 5: 'tips', + 6: 'loading', + 7: 'msg', +} */ +class __layer__ { + get dot() { //loading的子元素数量 - 1: 0, - 2: 0, - 3: 5, - 4: 5, - 5: 9 - }, - timeout: null, - construct: function(opt) { + return { + 1: 1, + 2: 1, + 3: 5, + 4: 5, + 5: 9 + } + } + + constructor(opt) { + if (opt) { + let { yes, no, success } = opt + delete opt.yes + delete opt.no + delete opt.success + + this.__init__({ + state: { ...opt }, + props: { yes, no, success } + }) + .append() + .show() + } + this.timeout = null + } + + // 真正的初始化弹层配置 + __init__(opt) { let _id = opt.$id || uuid() this.init = { $id: _id, @@ -311,7 +148,7 @@ __layer__.prototype = { this.$refs.layer.classList.remove('scale') }, 100) } else { - this.close() + this.maskClose && this.close() } }, handleConfirm: function() { @@ -347,16 +184,15 @@ __layer__.prototype = { } } - if (this.init.state.icon > 9) { - this.init.state.icon = 9 - } //base版没有iframe类型 if (this.init.state.type === 4) { this.init.state.type = 7 } return this - }, - create: function() { + } + + // 创建弹层容器及骨架 + create() { let { state, $id } = this.init let outerBox = document.createElement('div') let layBox = document.createElement('div') @@ -371,9 +207,19 @@ __layer__.prototype = { layBox.classList.add('layer-box') layBox.classList.add('skin-' + state.skin) + + if (typeof state.shift === 'string') { + layBox.classList.add('__' + state.shift) + } else { + for (let k in state.shift) { + layBox.style.cssText += `${k}: ${state.shift[k]};` + } + } + if (state.type === 5) { layBox.classList.add('active') } + if (state.toast) { layBox.classList.add('type-toast') } else { @@ -383,11 +229,10 @@ __layer__.prototype = { layBox.setAttribute('ref', 'layer') layBox.setAttribute(':click', 'cancelBubble') - //暂时隐藏,避免修正定位时,能看到闪一下 - layBox.style.cssText += - 'visibility:hidden; border-radius:' + state.radius + 'px' + // 暂时隐藏,避免修正定位时,能看到闪一下 + layBox.style.cssText += 'border-radius:' + state.radius + 'px' - //没有菜单栏, 且未禁止拖拽,则加上可拖拽属性 + // 没有菜单栏, 且未禁止拖拽,则加上可拖拽属性 if (!state.menubar && !state.fixed) { layBox.setAttribute(':drag', '') layBox.setAttribute('data-limit', 'window') @@ -409,64 +254,57 @@ __layer__.prototype = { } layBox.innerHTML = ` - ${this.getMenubar()} + ${this.mkMenubar()}
- ${state.type === 6 ? this.getLoading(state.load) : ''} + ${state.type === 6 ? this.mkLoading(state.load) : ''}
- ${this.getCtrl()} + ${this.mkCtrl()} ${arrow} ` delete state.wrap outerBox.appendChild(layBox) return [outerBox, layBox] - }, - // getCont: function() { - // let { state, $id } = this.init - // if (state.type === 6) { - // return this.getLoading(state.load) - // } else { - // return !state.wrap ? '{{content | html}}' : '' - // } - // }, - getLoading: function(style) { + } + + // 创建loading元素 + mkLoading(style) { return `
- ${repeat('', this.dot[style])} + ${repeat( + style === 1 + ? '' + : style === 2 ? '' : '', + this.dot[style] + )}
` - }, - //获取窗口导航条 - getMenubar: function() { - let { state, $id } = this.init + } + + // 创建窗口导航条 + mkMenubar() { + let { menubar, fixed } = this.init.state let html = '' - if (state.menubar) { + if (menubar) { html = `
+ ${!fixed ? ':drag="layer-box" data-limit="window"' : ''}>
` } return html - }, - //获取窗口内容的图标 - getIcon: function() { - let { state, $id } = this.init - if (state.type < 4 || state.type === 5 || state.specialMode) { - return `` - } - return '' - }, - // 获取窗口按钮 - getCtrl: function() { - let { state, $id } = this.init - if (state.type > 3) { + } + + // 创建窗口按钮 + mkCtrl() { + let { type } = this.init.state + if (type > 3) { return '' } else { let html = '' @@ -477,7 +315,7 @@ __layer__.prototype = { :text="btns[0]" > ` - if (state.type > 1) { + if (type > 1) { btns = ` { + layerDom[$id][1].classList.add('shift') + setTimeout(_ => { + Anot(layerDom[$id][1]).css(offsetStyle) + setTimeout(_ => { + try { + layerDom[$id][1].classList.remove('shift') + layerDom[$id][1].classList.remove('__' + state.shift) + } catch (err) {} + }, 500) + }, 50) + }, 50) + } }, 4) // loading类型,回调需要自动触发 @@ -565,23 +423,197 @@ __layer__.prototype = { //大于0自动触发超时关闭 if (state.timeout > 0) { clearTimeout(this.timeout) - this.timeout = setTimeout(function() { - clearTimeout(_this.timeout) - _layer.close($id) + this.timeout = setTimeout(() => { + clearTimeout(this.timeout) + close($id) // 为loading类型时,自动关闭同时触发回调 if (state.type === 6) { - _this.vm.yes($id) + this.vm.props.yes($id) } }, state.timeout) } else if (state.type === 6) { // loading类型, 非自动关闭时, 主动触发回调 - this.vm.yes($id) + this.vm.props.yes($id) } } } } +const _layer = { + alert: function(content, title, cb) { + let opt = { content, fixed: true } + + if (typeof title === 'function') { + opt.yes = title + } else { + if (title) { + opt.title = title + '' + } + if (cb && typeof cb === 'function') { + opt.yes = cb + } + } + return _layer.open(opt) + }, + confirm: function(content, title, yescb, nocb) { + let opt = { content, fixed: true, type: 2 } + + if (typeof title === 'function') { + opt.yes = title + if (typeof yescb === 'function') { + opt.no = yescb + } + } else { + if (title) { + opt.title = title + '' + } + if (yescb && typeof yescb === 'function') { + opt.yes = yescb + } + if (nocb && typeof nocb === 'function') { + opt.no = nocb + } + } + return _layer.open(opt) + }, + toast: function(txt, type = 'info', timeout = 2500) { + if (typeof type === 'number') { + timeout = type + type = 'info' + } + switch (type) { + case 'info': + break + case 'warn': + break + case 'error': + type = 'deny' + break + default: + type = 'info' + } + + let opt = { + content: ` + + + ${txt} + `, + menubar: false, + mask: false, + type: 7, + shift: 'tc', + timeout, + offset: [50, 'auto'], + fixed: true, + toast: true // toast模式 + } + + return _layer.open(opt) + }, + loading: function(style, time, cb) { + style = style >>> 0 + + if (typeof time === 'function') { + cb = time + time = 0 + } else { + time = time >>> 0 + if (typeof cb !== 'function') { + cb = Anot.noop + } + } + return _layer.open({ + type: 6, + load: style, + yes: cb, + timeout: time, + menubar: false, + background: 'none', + shift: 'ct', + fixed: true + }) + }, + tips: function(content, container, opt = {}) { + if (!(container instanceof HTMLElement)) { + return Anot.error('tips类型必须指定一个目标容器') + } + if (!opt.hasOwnProperty('timeout')) { + opt.timeout = 2500 + } + if (!opt.background) { + opt.background = 'rgba(0,0,0,.5)' + } + if (!opt.color) { + opt.color = '#fff' + } + Object.assign(opt, { + container, + content, + type: 5, + fixed: true, + mask: false, + menubar: false + }) + return _layer.open(opt) + }, + prompt: function(title, yescb) { + if (typeof yescb !== 'function') { + return console.error( + 'argument [callback] requires a function, but ' + + typeof yescb + + ' given' + ) + } + let opt = { + type: 3, + prompt: '', + title, + content: + '', + fixed: true, + yes: yescb + } + return _layer.open(opt) + }, + use: function(skin, callback) { + require(['css!./skin/' + skin], callback) + }, + close: close, + open: function(opt) { + console.log(opt) + if (typeof opt === 'string') { + /*opt = '$wrap-' + opt + if (!layerObj[opt]) { + throw new Error('layer实例不存在') + } else { + //只能显示一个实例 + if (layerObj[opt].show) { + return opt + } + layerObj[opt].show = true + + if (!Anot.vmodels[opt]) { + Anot(layerObj[opt].obj.init) + } + + layerObj[opt].parentElem.appendChild(layerDom[opt][1]) + layerDom[opt][1] + .querySelector('.detail') + .appendChild(layerObj[opt].wrap) + layerObj[opt].wrap.style.display = '' + // Anot.scan(layerDom[opt][1]) + layerObj[opt].obj.show() + return opt + }*/ + } else { + return new __layer__(opt).init.$id + } + }, + version: Anot.ui.layer +} + Anot.directive('layer', { priority: 1400, init: function(binding) { diff --git a/src/js/layer/skin/def.scss b/src/js/layer/skin/default.scss similarity index 65% rename from src/js/layer/skin/def.scss rename to src/js/layer/skin/default.scss index a05028e..bc9575c 100644 --- a/src/js/layer/skin/def.scss +++ b/src/js/layer/skin/default.scss @@ -11,30 +11,28 @@ .do-layer {width:auto;height:auto; - - .layer-box {position:absolute;} a {text-decoration:none;} - .layer-box {left:50%;top:50%;z-index:65535; + .layer-box {position:absolute;z-index:65535;opacity:0; + + &.shift {transition: all .5s ease-out;} - &.shift {transition: all .3s ease-in-out;} + &.__tc {top:0;left:50%;} + &.__tl {top:0;left:0;} + &.__tr {top:0;left:100%;} + &.__ct {top:50%;left:50%;} + &.__cc {top:47.5%;left:50%;} + &.__bc {top:100%;left:50%;} + &.__bl {top:100%;left:0;} + &.__br {top:100%;left:100%;} + + &.scale {transform:scale(1.02);transition:transform .1s linear;} /* 默认皮肤 */ - &.skin-def {padding:15px 10px;border-radius:3px;color:#666;font-size:14px;box-shadow:0 5px 20px rgba(0,0,0,.3); - - .icon-0::before {content:"\e674";color:nth($cr, 1);} // question - .icon-1::before {content:"\e610";color:nth($ct, 1);} // get - .icon-2::before {content:"\e6f8";color:nth($cb, 1);} // happy - .icon-3::before {content:"\e6fd";color:nth($co, 1);} // sad - .icon-4::before {content:"\e6f6";color:nth($co, 1);} // warn - .icon-5::before {content:"\e673";color:nth($ct, 1);} // face - .icon-6::before {content:"\e636";color:nth($cgr, 1);} // time - .icon-7::before {content:"\e623";color:nth($co, 1);} // star - .icon-8::before {content:"\e604";color:nth($cr, 1);} // mute - .icon-9::before {content:"\e605";color:nth($ct, 1);} // unmute + &.skin-default {padding:15px 10px;border-radius:3px;color:#666;font-size:14px;box-shadow:0 5px 20px rgba(0,0,0,.3); /* 弹层标题栏 */ @@ -51,9 +49,6 @@ &:focus {border-color:nth($ct, 1)} } .msg-box {line-height:30px;} - - - &.none-icon .detail {margin:0 auto;} } @@ -98,29 +93,36 @@ .layer-content {min-height:40px;height:40px;padding:0} - .toast-box {display:inline-block;position:relative;min-height:40px;padding:5px 8px 5px 50px;line-height:28px;border:1px solid nth($co, 1);border-radius:3px;background:#fffbed;color:nth($co, 3);word-break: break-all; + .toast-box {display:inline-block;position:relative;min-height:40px;padding:5px 12px 5px 50px;line-height:28px;border-radius:3px;word-break: break-all; - &::before {position:absolute;left:15px;top:5px;font:20px/28px "ui font";color:nth($cr, 1);content:"\e6f6";} + &.style-info {border:1px solid nth($ct, 1);background:#edfbf8;color:nth($ct, 3);} + &.style-warn {border:1px solid nth($co, 1);background:#fffbed;color:nth($co, 3);} + &.style-deny {border:1px solid nth($cr, 1);background:#fffbed;color:nth($cr, 3);} + + >i {position:absolute;left:12px;top:5px;line-height:28px;font-size:26px;} } } /* 内置几种loading动画 */ - .loading-box {position:relative;width:100px;height:100px;margin:auto; + .loading {position:relative;width:100px;height:100px;margin:auto; .dot-box {position:absolute;display:block;} /* 常规的转动 */ &.style-1,&.style-2 { - .dot-box {width:70%;height:70%;margin:15%;-webkit-animation: circle 1.3s infinite linear;-moz-animation: circle 1.3s infinite linear;animation: circle 1.3s infinite linear; - - &::after {content:"\e648";font:70px/1 "ui font";} + .dot-box {width:70%;height:70%;margin:15%;line-height:70px;font-size:70px;text-align:center; + + i {display:block;width:100%;height:100%;} } } + &.style-1 { + .dot-box {animation: circle 1.3s infinite linear;} + } &.style-2 { - .dot-box::after {content:"\e64a";} + .dot-box {animation: round 1s infinite linear;} } /* 频谱波动 */ @@ -182,6 +184,8 @@ &.mask {position:fixed;z-index:65534;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.3); + &.shift {transition: all .5s ease-out;} + .layer-box {position:absolute;} } &:active {z-index:65536;} @@ -190,55 +194,32 @@ -@-webkit-keyframes circle { - to {-webkit-transform: rotate(360deg);} -} -@-moz-keyframes circle { - to {-moz-transform: rotate(360deg);} -} + @keyframes circle { - to {transform: rotate(360deg)} + to {transform: rotate(360deg)} } -@-webkit-keyframes circle2 { - 70%,to {-webkit-transform: rotate(405deg);} -} -@-moz-keyframes circle2 { - 70%,to {-moz-transform: rotate(405deg);} -} @keyframes circle2 { - 70%,to {transform: rotate(405deg);} + 70%,to {transform: rotate(405deg);} } -@-webkit-keyframes bounce { - 25% {-webkit-transform: scaleY(1.3);} - 50% {-webkit-transform: scaleY(.6);} -} -@-moz-keyframes bounce { - 25% {-moz-transform: scaleY(1.3);} - 50% {-moz-transform: scaleY(.6);} +@keyframes round { + from,24.99%, to {transform:rotate(0deg)} + 25%,49.99% {transform:rotate(90deg)} + 50%,74.99% {transform:rotate(180deg)} + 75%,99.99% {transform:rotate(270deg)} } + + @keyframes bounce { - 25% {transform: scaleY(1.3);} - 50% {transform: scaleY(.6);} -} - - - -@-webkit-keyframes grid { - - 36% {-webkit-transform: scale(.1);opacity:.3} - 60% {-webkit-transform: scale(1);opacity:1} -} -@-moz-keyframes grid { - - 36% {-moz-transform: scale(.1);opacity:.3} - 60% {-moz-transform: scale(1);opacity:1} -} -@keyframes grid { - - 36% {transform: scale(.1);opacity:.3} - 60% {transform: scale(1);opacity:1} + 25% {transform: scaleY(1.3);} + 50% {transform: scaleY(.6);} +} + + +@keyframes grid { + 36% {transform: scale(.1);opacity:.3} + 60% {transform: scale(1);opacity:1} }