//一、定义了一个获取元素的方法 function getEle(selector) { return document.querySelector(selector); } //二、获取到需要用到的DOM元素 let box = getEle("#box"),//容器 bgColor = getEle(".bgColor"),//背景色 txt = getEle(".txt"),//文本 slider = getEle(".slider"),//滑块 icon = getEle(".slider>i"), successMoveDistance = box.offsetWidth - slider.offsetWidth,//解锁需要滑动的距离 downX,//用于存放鼠标按下时的位置 isSuccess = false;//是否解锁成功的标志,默认不成功 //三、给滑块添加鼠标按下事件 slider.onmousedown = mousedownHandler; slider.addEventListener('touchstart', mousedownHandler, false); slider.addEventListener("touchmove", mousemoveHandler, false); slider.addEventListener("touchend", mouseupHandler, false); //3.1鼠标按下事件的方法实现 function mousedownHandler(e) { bgColor.style.transition = ""; slider.style.transition = ""; var e = e || window.event || e.which; downX = e.type === "touchstart" ? e.touches[0].clientX : e.clientX; //在鼠标按下时,分别给鼠标添加移动和松开事件 document.onmousemove = mousemoveHandler; document.onmouseup = mouseupHandler; }; //四、定义一个获取鼠标当前需要移动多少距离的方法 function getOffsetX(offset, min, max) { if (offset < min) { offset = min; } else if (offset > max) { offset = max; } return offset; } //3.1.1鼠标移动事件的方法实现 function mousemoveHandler(e) { var e = e || window.event || e.which; var moveX = e.type === "touchmove" ? e.touches[0].clientX : e.clientX; var offsetX = getOffsetX(moveX - downX, 0, successMoveDistance); bgColor.style.width = offsetX + "px"; slider.style.left = offsetX + "px"; if (offsetX === successMoveDistance) { slider.onmousedown = null; document.onmousemove = null; if (!isSuccess) { success(); } } //如果不设置滑块滑动时会出现问题(目前还不知道为什么) e.preventDefault(); }; //3.1.2鼠标松开事件的方法实现 function mouseupHandler(e) { if (!isSuccess) { bgColor.style.width = 0 + "px"; slider.style.left = 0 + "px"; bgColor.style.transition = "width 0.8s linear"; slider.style.transition = "left 0.8s linear"; icon.innerHTML = ""; icon.className = "iconfont icon-double-right"; slider.className = "slider"; slider.onmousedown = mousedownHandler; } document.onmousemove = null; document.onmouseup = null; }; //五、定义一个滑块解锁成功的方法 function success() { const username = $.trim($("#usernameinput_mobile").val()); $("#divMsg").css("color", "red"); if (username.length === 0 || username === "") { divMsg.innerHTML = '' + $.i18n.prop("account.null") + ''; return false; } else { isSuccess = true; bgColor.style.backgroundColor = "lightgreen"; slider.className = "slider active"; icon.innerHTML = ""; icon.className = "iconfont icon-xuanzhong"; txt.innerHTML = $.i18n.prop("verifying"); divMsg.innerHTML = ""; $.ajax({ url: 'retrieve.do?method=sendPhoneMessage', data: { username: username, }, type: 'post', dataType: 'json', async: true, success: function (obj) { console.log(obj) const data = JSON.parse(obj); if (data.result === "SUCCESS") { let time = 60; const interval = setInterval(function () { if (time <= 0) { clearInterval(interval); txt.innerHTML = $.i18n.prop("verify.get"); isSuccess = false; mouseupHandler(); return false; } else { time = time - 1; txt.innerHTML = $.i18n.prop("reacquire") + '(' + time + ')'; return false; } }, 1000); $('#username_mobile').val(data.uid); $("#divMsg").css("color", "green"); divMsg.innerHTML = '' + $.i18n.prop("phone.send1") + '' + ' ' + data.mobile + ' ' + '' + $.i18n.prop("phone.send2") + ''; } else { isSuccess = false; txt.innerHTML = $.i18n.prop("verify.get"); mouseupHandler(); $("#divMsg").css("color", "red"); if (data.result == "Mobile_None") { divMsg.innerHTML = '' + $.i18n.prop("nophone") + ''; return false; } else if (data.result == "Mobile_Error") { divMsg.innerHTML = '' + $.i18n.prop("phone.error") + ''; return false; } else if (data.result == "Uid_None") { divMsg.innerHTML = '' + $.i18n.prop("user.not.exist") + ''; return false; } else if (data.result == "Disabled") { divMsg.innerHTML = '' + $.i18n.prop("uid.disable") + ''; return false; } else if (data.result == "VALID_ERROR") { divMsg.innerHTML = '' + $.i18n.prop("vcode.error") + ''; return false; } else if (data.result == "X_NULL") { divMsg.innerHTML = '' + $.i18n.prop("X.not.exist") + ''; return false; } else if (data.result == "Y_NULL") { divMsg.innerHTML = '' + $.i18n.prop("Y.not.exist") + ''; return false; } else if (data.result == "IMGX_NULL") { divMsg.innerHTML = '' + $.i18n.prop("IMGX.not.exist") + ''; return false; } else if (data.result == "IMGY_NULL") { divMsg.innerHTML = '' + $.i18n.prop("IMGY_NULL.not.exist") + ''; return false; } else { divMsg.innerHTML = '' + $.i18n.prop("system.error") + ''; return false; } } }, error: function () { divcode.innerHTML = '' + $.i18n.prop("system.error") + ''; return false; } }); } };