class moveWindow { constructor(data) { this.id = data.id; this.start = 0; this.end = 0; this.domHeight = 0; this.domMove = null; this.openValue = false; this.useHeight = data.minHeight; this.maxHeight = data.maxHeight; this.height = data.minHeight; this.critical = data.critical; let that = this; this.fn = data.fn || function (res) { console.log("未设置回调函数"); console.log(res); }; this.ListenerTouchmove = function (window) { let moseHeight = window.changedTouches[0].clientY; // let windowHeight = document.body.clientHeight; //屏幕宽度 let endOn = moseHeight; let cha = +that.domHeight + that.start - +endOn; if (cha >= that.maxHeight) { cha = that.maxHeight; } else if (cha <= that.useHeight) { cha = that.useHeight; } let d = { state: "on", height: cha, }; that.fn(d); }; this.ListenerTouchstart = function (window) { let moseHeight = window.changedTouches[0].clientY; that.start = moseHeight; that.domHeight = document .getElementById(that.id) .style.cssText.split("px")[0] .split("height:")[1]; }; this.ListenerTouchend = function (window) { let moseHeight = window.changedTouches[0].clientY; that.end = moseHeight; let cha, states; if (that.end >= that.start) { states = false; //方向 cha = that.end - that.start; } else { states = true; //方向 cha = that.start - that.end; } if (cha >= that.critical) { //高 that.opens(states, true); //程度 } else if (cha < that.critical) { //低 that.opens(states, false); //程度 } }; return this; } //启动监听事件 init() { // this.domMove = document.getElementById(this.id); let that = this; this.checkDom(that.id, (dom) => { //检测是否有dom that.domMove = dom; that.domMove.addEventListener("touchmove", that.ListenerTouchmove); // 结束位置靠滑动距离判断 that.domMove.addEventListener("touchstart", that.ListenerTouchstart); that.domMove.addEventListener("touchend", that.ListenerTouchend); }); } //关闭监听事件 closeInit() { this.domMove = document.getElementById(this.id); this.domMove.removeEventListener("touchmove", this.ListenerTouchmove); // 结束位置靠滑动距离判断 this.domMove.removeEventListener("touchstart", this.ListenerTouchstart); this.domMove.removeEventListener("touchend", this.ListenerTouchend); } //输出事件 opens(val, chengdu) { if (chengdu) { this.openValue = val; if (val) { this.height = this.maxHeight; } else { this.height = this.useHeight; } } else { this.height = this.domHeight; } let d = { state: this.openValue, height: this.height, }; // console.log(val, this.height); this.fn(d); } changeHeight() { //抛出切换方法 this.openValue = !this.openValue; if (this.openValue) { this.height = this.maxHeight; } else { this.height = this.useHeight; } let d = { state: this.openValue, height: this.height, }; // console.log(val, this.height); this.fn(d); } checkDom(name, fn) { // 声明定时器 var timer = null; // 检查dom是否执行完成 function checkDom() { // let dom = that.$refs[name]; let dom = document.getElementById(name); if (dom) { // 执行dom加载完成后的操作 // 清除定时器 if (!timer) { clearTimeout(timer); } if (fn) { //回调函数 fn(dom); return; } else { return dom; } } else { // 自我调用 timer = setTimeout(checkDom, 100); } } // 首次执行 checkDom(); } // 结束位置是一半判断 // domMove.addEventListener("touchend", function (window) { // let moseHeight = window.changedTouches[0].clientY; // let windowHeight = document.body.clientHeight; // let cha = windowHeight - moseHeight; // console.log(cha, "最后位置"); // let centerPoint = // (windowHeight / 2 - +that.useHeight) / 2 + +that.useHeight; // if (cha >= centerPoint) { // cha = windowHeight / 2; // } else if (cha < centerPoint) { // cha = that.useHeight; // } // that.height = cha; // }); } export default moveWindow;