We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如果文章和笔记能带您一丝帮助或者启发,请不要吝啬你的赞和收藏,你的肯定是我前进的最大动力😁
function noRepeat(arr) { return [...new Set(arr)]; }
function arrayMax(arr) { return Math.max(...arr); }
function arrayMin(arr) { return Math.min(...arr); }
function chunk(arr, size = 1) { return Array.from( { length: Math.ceil(arr.length / size), }, (v, i) => arr.slice(i * size, i * size + size) ); }
function countOccurrences(arr, value) { return arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0); }
function flatten(arr, depth = -1) { if (depth === -1) { return [].concat( ...arr.map((v) => (Array.isArray(v) ? this.flatten(v) : v)) ); } if (depth === 1) { return arr.reduce((a, v) => a.concat(v), []); } return arr.reduce( (a, v) => a.concat(Array.isArray(v) ? this.flatten(v, depth - 1) : v), [] ); }
function diffrence(arrA, arrB) { return arrA.filter((v) => !arrB.includes(v)); }
function intersection(arr1, arr2) { return arr2.filter((v) => arr1.includes(v)); }
function dropRight(arr, n = 0) { return n < arr.length ? arr.slice(0, arr.length - n) : []; }
function dropElements(arr, fn) { while (arr.length && !fn(arr[0])) arr = arr.slice(1); return arr; }
function everyNth(arr, nth) { return arr.filter((v, i) => i % nth === nth - 1); }
function nthElement(arr, n = 0) { return (n >= 0 ? arr.slice(n, n + 1) : arr.slice(n))[0]; }
function head(arr) { return arr[0]; }
function last(arr) { return arr[arr.length - 1]; }
function shuffle(arr) { let array = arr; let index = array.length; while (index) { index -= 1; let randomInedx = Math.floor(Math.random() * index); let middleware = array[index]; array[index] = array[randomInedx]; array[randomInedx] = middleware; } return array; }
/** * 告知浏览器支持的指定css属性情况 * @param {String} key - css属性,是属性的名字,不需要加前缀 * @returns {String} - 支持的属性情况 */ function validateCssKey(key) { const jsKey = toCamelCase(key); // 有些css属性是连字符号形成 if (jsKey in document.documentElement.style) { return key; } let validKey = ""; // 属性名为前缀在js中的形式,属性值是前缀在css中的形式 // 经尝试,Webkit 也可是首字母小写 webkit const prefixMap = { Webkit: "-webkit-", Moz: "-moz-", ms: "-ms-", O: "-o-", }; for (const jsPrefix in prefixMap) { const styleKey = toCamelCase(`${jsPrefix}-${jsKey}`); if (styleKey in document.documentElement.style) { validKey = prefixMap[jsPrefix] + key; break; } } return validKey; } /** * 把有连字符号的字符串转化为驼峰命名法的字符串 */ function toCamelCase(value) { return value.replace(/-(\w)/g, (matched, letter) => { return letter.toUpperCase(); }); } /** * 检查浏览器是否支持某个css属性值(es6版) * @param {String} key - 检查的属性值所属的css属性名 * @param {String} value - 要检查的css属性值(不要带前缀) * @returns {String} - 返回浏览器支持的属性值 */ function valiateCssValue(key, value) { const prefix = ["-o-", "-ms-", "-moz-", "-webkit-", ""]; const prefixValue = prefix.map((item) => { return item + value; }); const element = document.createElement("div"); const eleStyle = element.style; // 应用每个前缀的情况,且最后也要应用上没有前缀的情况,看最后浏览器起效的何种情况 // 这就是最好在prefix里的最后一个元素是'' prefixValue.forEach((item) => { eleStyle[key] = item; }); return eleStyle[key]; } /** * 检查浏览器是否支持某个css属性值 * @param {String} key - 检查的属性值所属的css属性名 * @param {String} value - 要检查的css属性值(不要带前缀) * @returns {String} - 返回浏览器支持的属性值 */ function valiateCssValue(key, value) { var prefix = ["-o-", "-ms-", "-moz-", "-webkit-", ""]; var prefixValue = []; for (var i = 0; i < prefix.length; i++) { prefixValue.push(prefix[i] + value); } var element = document.createElement("div"); var eleStyle = element.style; for (var j = 0; j < prefixValue.length; j++) { eleStyle[key] = prefixValue[j]; } return eleStyle[key]; } function validCss(key, value) { const validCss = validateCssKey(key); if (validCss) { return validCss; } return valiateCssValue(key, value); }
function currentURL() { return window.location.href; }
function getScrollPosition(el = window) { return { x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop, }; }
function getURLParameters(url) { return url .match(/([^?=&]+)(=([^&]*))/g) .reduce( (a, v) => ( (a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1)), a ), {} ); }
function redirect(url, asLink = true) { asLink ? (window.location.href = url) : window.location.replace(url); }
function scrollToTop() { const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; if (scrollTop > 0) { window.requestAnimationFrame(scrollToTop); window.scrollTo(0, c - c / 8); } else { window.cancelAnimationFrame(scrollToTop); } }
function copy(str) { const el = document.createElement("textarea"); el.value = str; el.setAttribute("readonly", ""); el.style.position = "absolute"; el.style.left = "-9999px"; el.style.top = "-9999px"; document.body.appendChild(el); const selected = document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false; el.select(); document.execCommand("copy"); document.body.removeChild(el); if (selected) { document.getSelection().removeAllRanges(); document.getSelection().addRange(selected); } }
function detectDeviceType() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( navigator.userAgent ) ? "Mobile" : "Desktop"; }
function setCookie(key, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie = key + "=" + escape(value) + (expiredays == null ? "" : ";expires=" + exdate.toGMTString()); }
function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval = getCookie(name); if (cval != null) { document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString(); } }
function getCookie(name) { var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if ((arr = document.cookie.match(reg))) { return arr[2]; } else { return null; } }
默认为当前时间转换结果
isMs 为时间戳是否为毫秒
function timestampToTime(timestamp = Date.parse(new Date()), isMs = true) { const date = new Date(timestamp * (isMs ? 1 : 1000)); return `${date.getFullYear()}-${ date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1 }-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; }
/** * 功能描述:一些业务场景,如弹框出现时,需要禁止页面滚动,这是兼容安卓和 iOS 禁止页面滚动的解决方案 */ let scrollTop = 0; function preventScroll() { // 存储当前滚动位置 scrollTop = window.scrollY; // 将可滚动区域固定定位,可滚动区域高度为 0 后就不能滚动了 document.body.style["overflow-y"] = "hidden"; document.body.style.position = "fixed"; document.body.style.width = "100%"; document.body.style.top = -scrollTop + "px"; // document.body.style['overscroll-behavior'] = 'none' } function recoverScroll() { document.body.style["overflow-y"] = "auto"; document.body.style.position = "static"; // document.querySelector('body').style['overscroll-behavior'] = 'none' window.scrollTo(0, scrollTop); }
function bottomVisible() { return ( document.documentElement.clientHeight + window.scrollY >= (document.documentElement.scrollHeight || document.documentElement.clientHeight) ); }
function elementIsVisibleInViewport(el, partiallyVisible = false) { const { top, left, bottom, right } = el.getBoundingClientRect(); return partiallyVisible ? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) && ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth)) : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth; }
function getStyle(el, ruleName) { return getComputedStyle(el, null).getPropertyValue(ruleName); }
function launchFullscreen(element) { if (element.requestFullscreen) { element.requestFullscreen(); } else if (element.mozRequestFullScreen) { element.mozRequestFullScreen(); } else if (element.msRequestFullscreen) { element.msRequestFullscreen(); } else if (element.webkitRequestFullscreen) { element.webkitRequestFullScreen(); } } launchFullscreen(document.documentElement); launchFullscreen(document.getElementById("id")); //某个元素进入全屏
function exitFullscreen() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } } exitFullscreen();
document.addEventListener("fullscreenchange", function (e) { if (document.fullscreenElement) { console.log("进入全屏"); } else { console.log("退出全屏"); } });
function commafy(num) { return num.toString().indexOf(".") !== -1 ? num.toLocaleString() : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,"); }
function randomNum(min, max) { switch (arguments.length) { case 1: return parseInt(Math.random() * min + 1, 10); case 2: return parseInt(Math.random() * (max - min + 1) + min, 10); default: return 0; } }
文章同步持续更新,可以微信搜索「 前端遨游 」关注公众号方便你往后阅读,往期文章收录在https://github.com/Wscats/art... 欢迎您的关注和交流😁
The text was updated successfully, but these errors were encountered:
No branches or pull requests
如果文章和笔记能带您一丝帮助或者启发,请不要吝啬你的赞和收藏,你的肯定是我前进的最大动力😁
数组 Array
数组去重
查找数组最大
查找数组最小
返回已 size 为长度的数组分割的原数组
检查数组中某元素出现的次数
扁平化数组
对比两个数组并且返回其中不同的元素
返回两个数组中相同的元素
从右删除 n 个元素
截取第一个符合条件的元素及其以后的元素
返回数组中下标间隔 nth 的元素
返回数组中第 n 个元素
返回数组头元素
返回数组末尾元素
数组乱排
浏览器对象 BOM
判读浏览器是否支持 CSS 属性
返回当前网页地址
获取滚动条位置
获取 url 中的参数
页面跳转,是否记录在 history 中
滚动条回到顶部动画
复制文本
检测设备类型
Cookie
增
删
查
日期 Date
时间戳转换为时间
默认为当前时间转换结果
isMs 为时间戳是否为毫秒
文档对象 DOM
固定滚动条
判断当前位置是否为页面底部
判断元素是否在可视范围内
获取元素 css 样式
进入全屏
退出全屏
全屏事件
数字 Number
数字千分位分割
生成随机数
交流
文章同步持续更新,可以微信搜索「 前端遨游 」关注公众号方便你往后阅读,往期文章收录在https://github.com/Wscats/art...
欢迎您的关注和交流😁
The text was updated successfully, but these errors were encountered: