188 lines
4.8 KiB
JavaScript
188 lines
4.8 KiB
JavaScript
|
layui.define(['jquery', 'element'], function(exports) {
|
||
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* Drawer component
|
||
|
* */
|
||
|
var MOD_NAME = 'drawer',
|
||
|
$ = layui.jquery,
|
||
|
element = layui.element;
|
||
|
|
||
|
var drawer = new function() {
|
||
|
|
||
|
/**
|
||
|
* open drawer
|
||
|
* */
|
||
|
this.open = function(option) {
|
||
|
var obj = new mSlider({
|
||
|
dom: option.dom,
|
||
|
direction: option.direction,
|
||
|
distance: option.distance,
|
||
|
time:option.time?option.time:0,
|
||
|
maskClose:option.maskClose,
|
||
|
callback:option.success
|
||
|
});
|
||
|
obj.open();
|
||
|
return obj;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
exports(MOD_NAME,drawer);
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* 源码
|
||
|
* */
|
||
|
(function(b, c) {
|
||
|
function a(d) {
|
||
|
this.opts = {
|
||
|
"direction": d.direction || "left",
|
||
|
"distance": d.distance || "60%",
|
||
|
"dom": this.Q(d.dom),
|
||
|
"time": d.time || "",
|
||
|
"maskClose": (d.maskClose + "").toString() !== "false" ? true : false,
|
||
|
"callback": d.callback || ""
|
||
|
};
|
||
|
this.rnd = this.rnd();
|
||
|
this.dom = this.opts.dom[0];
|
||
|
this.wrap = "";
|
||
|
this.inner = "";
|
||
|
this.mask = "";
|
||
|
this.init()
|
||
|
}
|
||
|
a.prototype = {
|
||
|
Q: function(d) {
|
||
|
return document.querySelectorAll(d)
|
||
|
},
|
||
|
isMobile: function() {
|
||
|
return navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) ? true : false
|
||
|
},
|
||
|
addEvent: function(f, e, d) {
|
||
|
if (f.attachEvent) {
|
||
|
f.attachEvent("on" + e, d)
|
||
|
} else {
|
||
|
f.addEventListener(e, d, false)
|
||
|
}
|
||
|
},
|
||
|
rnd: function() {
|
||
|
return Math.random().toString(36).substr(2, 6)
|
||
|
},
|
||
|
init: function() {
|
||
|
var g = this;
|
||
|
if (!g.dom) {
|
||
|
console.log("未正确绑定弹窗容器");
|
||
|
return
|
||
|
}
|
||
|
var d = document.createElement("div");
|
||
|
var e = document.createElement("div");
|
||
|
var f = document.createElement("div");
|
||
|
d.setAttribute("class", "mSlider-main ms-" + g.rnd);
|
||
|
e.setAttribute("class", "mSlider-inner");
|
||
|
f.setAttribute("class", "mSlider-mask");
|
||
|
g.Q("body")[0].appendChild(d);
|
||
|
g.Q(".ms-" + g.rnd)[0].appendChild(e);
|
||
|
g.Q(".ms-" + g.rnd)[0].appendChild(f);
|
||
|
g.wrap = g.Q(".ms-" + g.rnd)[0];
|
||
|
g.inner = g.Q(".ms-" + g.rnd + " .mSlider-inner")[0];
|
||
|
g.mask = g.Q(".ms-" + g.rnd + " .mSlider-mask")[0];
|
||
|
g.inner.appendChild(g.dom);
|
||
|
switch (g.opts.direction) {
|
||
|
case "top":
|
||
|
g.top = "0";
|
||
|
g.left = "0";
|
||
|
g.width = "100%";
|
||
|
g.height = g.opts.distance;
|
||
|
g.translate = "0,-100%,0";
|
||
|
break;
|
||
|
case "bottom":
|
||
|
g.bottom = "0";
|
||
|
g.left = "0";
|
||
|
g.width = "100%";
|
||
|
g.height = g.opts.distance;
|
||
|
g.translate = "0,100%,0";
|
||
|
break;
|
||
|
case "right":
|
||
|
g.top = "0";
|
||
|
g.right = "0";
|
||
|
g.width = g.opts.distance;
|
||
|
g.height = document.documentElement.clientHeight + "px";
|
||
|
g.translate = "100%,0,0";
|
||
|
break;
|
||
|
default:
|
||
|
g.top = "0";
|
||
|
g.left = "0";
|
||
|
g.width = g.opts.distance;
|
||
|
g.height = document.documentElement.clientHeight + "px";
|
||
|
g.translate = "-100%,0,0"
|
||
|
}
|
||
|
g.wrap.style.display = "none";
|
||
|
g.wrap.style.position = "fixed";
|
||
|
g.wrap.style.top = "0";
|
||
|
g.wrap.style.left = "0";
|
||
|
g.wrap.style.width = "100%";
|
||
|
g.wrap.style.height = "100%";
|
||
|
g.wrap.style.zIndex = 99;
|
||
|
g.inner.style.position = "absolute";
|
||
|
g.inner.style.top = g.top;
|
||
|
g.inner.style.bottom = g.bottom;
|
||
|
g.inner.style.left = g.left;
|
||
|
g.inner.style.right = g.right;
|
||
|
g.inner.style.width = g.width;
|
||
|
g.inner.style.height = g.height;
|
||
|
g.inner.style.backgroundColor = "#fff";
|
||
|
g.inner.style.transform = "translate3d(" + g.translate + ")";
|
||
|
g.inner.style.webkitTransition = "all .2s ease-out";
|
||
|
g.inner.style.transition = "all .2s ease-out";
|
||
|
g.inner.style.zIndex = 100;
|
||
|
g.mask.style.width = "100%";
|
||
|
g.mask.style.height = "100%";
|
||
|
g.mask.style.opacity = "0";
|
||
|
g.mask.style.backgroundColor = "black";
|
||
|
g.mask.style.zIndex = "98";
|
||
|
g.mask.style.webkitTransition = "all .2s ease-out";
|
||
|
g.mask.style.transition = "all .2s ease-out";
|
||
|
g.mask.style.webkitBackfaceVisibility = "hidden";
|
||
|
g.events()
|
||
|
},
|
||
|
open: function() {
|
||
|
var d = this;
|
||
|
d.wrap.style.display = "block";
|
||
|
|
||
|
setTimeout(function() {
|
||
|
d.inner.style.transform = "translate3d(0,0,0)";
|
||
|
d.inner.style.webkitTransform = "translate3d(0,0,0)";
|
||
|
d.mask.style.opacity = 0.5
|
||
|
}, 30);
|
||
|
if (d.opts.time) {
|
||
|
d.timer = setTimeout(function() {
|
||
|
d.close()
|
||
|
}, d.opts.time)
|
||
|
}
|
||
|
},
|
||
|
close: function() {
|
||
|
var d = this;
|
||
|
d.timer && clearTimeout(d.timer);
|
||
|
d.inner.style.webkitTransform = "translate3d(" + d.translate + ")";
|
||
|
d.inner.style.transform = "translate3d(" + d.translate + ")";
|
||
|
d.mask.style.opacity = 0;
|
||
|
setTimeout(function() {
|
||
|
d.wrap.style.display = "none";
|
||
|
d.timer = null;
|
||
|
d.opts.callback && d.opts.callback()
|
||
|
}, 300)
|
||
|
},
|
||
|
events: function() {
|
||
|
var d = this;
|
||
|
d.addEvent(d.mask, "touchmove", function(f) {
|
||
|
f.preventDefault()
|
||
|
});
|
||
|
d.addEvent(d.mask, (d.isMobile() ? "touchend" : "click"), function(f) {
|
||
|
if (d.opts.maskClose) {
|
||
|
d.close()
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
};
|
||
|
b.mSlider = a
|
||
|
})(window);
|