浏览器工具函数
2024年11月4日大约 1 分钟
页面滚动到底部
/**
* 页面滚动到底部
* @param {number} distance 每次滚动的距离(单位是px),默认为600
* @param {number} interval 每次滚动的时间间隔(单位是ms),默认为500
*/
function scrollToBottom(distance = 600, interval = 500) {
let totalHeight = 0;
let timer = setInterval(() => {
window.scrollBy(0, distance);
totalHeight += distance;
if (totalHeight >= document.body.scrollHeight) {
clearInterval(timer);
resolve();
}
}, interval);
}
判断是否安装某个软件
原理:利用input聚焦失焦去判断
- 如果浏览器检测到本地系统有对应的注册码,则会弹窗提示是否打开客户端软件,input失去焦点,判断安装了客户端
- 否则 1s 后还没弹窗,判断没有安装客户端
/**
* uri 打开客户端的uri
* failCb 打开客户端失败回调
* successCb 打开客户端成功回调
*/
function openUriWithInputTimeoutHack(uri, failCb, successCb) {
let target = document.createElement('input');
target.style.width = '0';
target.style.height = '0';
target.style.position = 'fixed';
target.style.top = '0';
target.style.left = '0';
document.body.appendChild(target);
target.focus();
let handler = this.registerEvent(target, "blur", onBlur);
function onBlur() {
successCb && successCb();
handler.remove();
clearTimeout(timeout);
document.body.removeChild(target);
}
location.href = uri;
let timeout = setTimeout(function () {
failCb && failCb();
handler.remove();
document.body.removeChild(target);
}, 1000);
}
function registerEvent(target, eventType, cb) {
if (target.addEventListener) {
target.addEventListener(eventType, cb);
return {
remove: function () {
target.removeEventListener(eventType, cb);
},
}
} else {
target.attachEvent(eventType, cb);
return {
remove: function () {
target.detachEvent(eventType, cb);
},
};
}
}