业务功能常用的JS代码片段

简介: 业务功能常用的JS代码片段

判断所有数据类型
@param obj 要判断类型的数据

@return {string} 数据类型(小写)

const type = (function () {
// 映射类型
const classType =
"Boolean Number String Function Array Date RegExp Object Error Null Undefined"
.split(" ")
.reduce((obj, item) => {
obj["[object " + item + "]"] = item.toLowerCase();
return obj;
}, {});

return function (obj) {
// 仅 undefined 与 null 成立
if (obj == null) {
return obj + "";
}
return typeof obj === "object"
? classType[Object.prototype.toString.call(obj)]
: typeof obj;
};
})();

// Examples
console.log(type(new Date())); // date
console.log(type([1, 2])); // array
console.log(type(1)); // number
console.log(type({})); // object
判断空对象
function isEmptyObject(obj) {
if (Object.prototype.toString.call(obj) !== "[object Object]") return false;
var name;
for (name in obj) {
return false;
}
return true;
}

// Examples
console.log(isEmptyObject({})); // true
console.log(isEmptyObject([])); // false
console.log(isEmptyObject(null)); // false
console.log(isEmptyObject(undefined)); // false
console.log(isEmptyObject(1)); // false
console.log(isEmptyObject("")); // false
console.log(isEmptyObject(true)); // false
判断当前运行环境
function userAgent() {
var u = navigator.userAgent;
return {
// 移动终端浏览器版本信息
trident: u.indexOf("Trident") > -1, // IE内核
presto: u.indexOf("Presto") > -1, // opera内核
webKit: u.indexOf("AppleWebKit") > -1, // 苹果、谷歌内核
gecko: u.indexOf("Gecko") > -1 && u.indexOf("KHTML") === -1, // 火狐内核
mobile: !!u.match(/AppleWebKit.Mobile./), // 是否为移动终端
iPad: u.indexOf("iPad") > -1, // 是否iPad
webApp: u.indexOf("Safari") === -1, // 是否web应该程序,没有头部与底部,
isiOS: !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
isAndroid: u.indexOf("Android") > -1 || u.indexOf("Adr") > -1,
};
}

// Examples
const browser = userAgent();
if (browser.mobile) {
// 移动端 => todo something
if (browser.isiOS && browser.webApp) {
// IOS系统 && web程序 => todo something
} else {
// 安卓 => todo something
}
} else {
// PC => todo something
}
平滑滚动到页面顶部
const scrollToTop = () => {
const c = document.documentElement.scrollTop || document.body.scrollTop;
if (c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c / 8);
}
};

// Examples
scrollToTop();
将视口平滑滚动到指定元素
const smoothScroll = (element) =>
document.querySelector(element).scrollIntoView({
behavior: "smooth",
});

// Examples
smoothScroll("#fooBar");
监听滚动结束
const onScrollStop = (callback) => {
let isScrolling;
window.addEventListener(
"scroll",
(e) => {
clearTimeout(isScrolling);
isScrolling = setTimeout(() => {
callback();
}, 150);
},
false
);
};

// Examples
onScrollStop(() => {
console.log("The user has stopped scrolling");
});
监听点击指定元素外部
const onClickOutside = (element, callback) => {
document.addEventListener("click", (e) => {
if (!element.contains(e.target)) callback();
});
};

// Examples
onClickOutside("#my-element", () => console.log("Hello"));
获取浏览器当前语言
// defaultLang 为默认语言
const detectLanguage = (defaultLang = "en-US") =>
navigator.language ||
(Array.isArray(navigator.languages) && navigator.languages[0]) ||
defaultLang;

// Examples
detectLanguage(); // 'nl-NL'
控制浏览器全屏、退出全屏
const fullscreen = (mode = true, el = "body") =>
mode
? document.querySelector(el).requestFullscreen()
: document.exitFullscreen();

// Examples
fullscreen(); // Opens body in fullscreen mode
fullscreen(false); // Exits fullscreen mode
封装原生 GET、POST 请求
const httpGet = (url, callback, err = console.error) => {
const request = new XMLHttpRequest();
request.open("GET", url, true);
request.onload = () => callback(request.responseText);
request.onerror = () => err(request);
request.send();
};

const httpPost = (url, data, callback, err = console.error) => {
const request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/json; charset=utf-8");
request.onload = () => callback(request.responseText);
request.onerror = () => err(request);
request.send(data);
};

// Examples
httpGet("", console.log); /
Logs: {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
/

httpPost(
"http://www.zidongmutanji.com/bxxx/172484.html
",
null, // does not send a body
console.log
); /
Logs: {
"id": 101
}
/

相关文章
|
27天前
|
JavaScript 前端开发
JavaScript分页功能
JavaScript分页功能
|
11天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
18天前
|
JavaScript 前端开发 API
|
18天前
|
JavaScript API UED
vue.js怎么实现全屏显示功能
【10月更文挑战第7天】
8 1
|
24天前
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
23天前
|
JavaScript 搜索推荐
JS中的模糊查询功能
JS中的模糊查询功能
24 1
|
17天前
|
前端开发 JavaScript
使用 JavaScript 实现图片预览功能
使用 JavaScript 实现图片预览功能
12 0
|
23天前
|
JavaScript 安全 前端开发
js实现复制功能
js实现复制功能
12 0
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
2月前
|
存储 文字识别 前端开发
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能