代码片段
代理 console.log 函数
javascript
function log(msg) {
console.log(msg);
}
log("hello world!") // hello world!要传⼊多个参数要使用 apply() 函数
javascript
function log(){
console.log.apply(console, arguments);
};格式化如期
获取今日日期 YYYY-MM-DD
javascript
function getDate() {
let d = new Date()
let year = d.getFullYear()
let month = d.getMonth() + 1 // ⽉份⽐较特殊,0是1⽉,11是12⽉
month = month < 10 ? "0" + month : month
let day = d.getDate()
day = day < 10 ? "0" + day : day
let date = year + "-" + month + "-" + day
console.log(date)
return date
}格式化时间戳
javascript
function parseTime(time) {
if (time) {
var date = new Date(time)
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate()
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours()
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()
// 拼接
let dateNow = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds
console.log(dateNow)
return dateNow
} else {
return ""
}
}
parseTime(new Date())格式化时间
javascript
export function formatTime(time) {
time = +time * 1000
const d = new Date(time)
const now = Date.now()
const diff = (now - d) / 1000
if (diff < 30) {
return "刚刚"
} else if (diff < 3600) {
return Math.ceil(diff / 60) + "分钟前"
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + "小时前"
} else if (diff < 3600 * 24 * 2) {
return "1天前"
}
return d.getMonth() + 1 + "月" + d.getDate() + "日" + d.getHours() + "时" + d.getMinutes() + "分"
}类名操作
javascript
/**
* Check if an element has a class
* @param {HTMLElement} elm
* @param {string} cls
* @returns {boolean}
*/
export function hasClass(ele, cls) {
return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
}
/**
* Add class to element
* @param {HTMLElement} elm
* @param {string} cls
*/
export function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += ' ' + cls
}
/**
* Remove class from element
* @param {HTMLElement} elm
* @param {string} cls
*/
export function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
ele.className = ele.className.replace(reg, ' ')
}
}替换邮箱手机号关键信息
javascript
// 替换邮箱字符
export function regEmail(email) {
if (String(email).indexOf("@") > 0) {
const str = email.split("@")
let _s = ""
if (str[0].length > 3) {
for (var i = 0; i < str[0].length - 3; i++) {
_s += "*"
}
}
var new_email = str[0].substr(0, 3) + _s + "@" + str[1]
}
console.log(new_email)
return new_email
}
// 替换手机字符
export function regMobile(mobile) {
if (mobile.length > 7) {
var new_mobile = mobile.substr(0, 3) + "****" + mobile.substr(7)
}
console.log(new_mobile)
return new_mobile
}
regEmail("12345678901@qq.com")
regMobile("12345678901") // 123****8901判断外链
在函数体中使用了正则表达式 ^(https?:|mailto:|tel:) 来进行检查。字符串的开头(^)是否是 http: 、https:、mailto: 或 tel: 中的任何一个。
http:和https:是网络链接的常见协议mailto:是用于电子邮件地址的协议tel:是用于电话号码的协议
isExternal 函数的作用就是检查输入的 path 是否是一个以 "http:"、"https:"、"mailto:" 或 "tel:" 开头的外部链接
javascript
export function isExternal(path) {
return /^(https?:|mailto:|tel:)/.test(path)
}防抖
javascript
export function debounce(func, wait, immediate) {
let timeout, args, context, timestamp, result
const later = function() {
// 据上一次触发时间间隔
const last = +new Date() - timestamp;
// 上次被包装函数被调用时间间隔last小于设定时间间隔wait
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last)
} else {
timeout = null
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
if (!immediate) {
result = func.apply(context, args)
if (!timeout) context = args = null
}
}
}
return function(...args) {
context = this
timestamp = +new Date()
const callNow = immediate && !timeout
// 如果延时不存在,重新设定延时
if (!timeout) timeout = setTimeout(later, wait)
if (callNow) {
result = func.apply(context, args)
context = args = null
}
return result
}
}rgb 颜色阶梯渐变效果
javascript
function gradientColor(startColor, endColor, step) {
var startRGB = this.colorRgb(startColor);//转换为rgb数组模式
var startR = startRGB[0];
var startG = startRGB[1];
var startB = startRGB[2];
var endRGB = this.colorRgb(endColor);
var endR = endRGB[0];
var endG = endRGB[1];
var endB = endRGB[2];
var sR = (endR - startR) / step;//总差值
var sG = (endG - startG) / step;
var sB = (endB - startB) / step;
var colorArr = [];
for (var i = 0; i < step; i++) {
//计算每一步的hex值
var hex = this.colorHex('rgb(' + parseInt((sR * i + startR)) + ','
+ parseInt((sG * i + startG)) + ',' + parseInt((sB * i + startB)) + ')');
colorArr.push(hex);
}
return colorArr;
}
// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
gradientColor.prototype.colorRgb = function (sColor) {
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
var sColor = sColor.toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = "#";
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i = 1; i < 7; i += 2) {
sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
}
return sColorChange;
} else {
return sColor;
}
};
// 将rgb表示方式转换为hex表示方式
gradientColor.prototype.colorHex = function (rgb) {
var _this = rgb;
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
if (/^(rgb|RGB)/.test(_this)) {
var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(",");
var strHex = "#";
for (var i = 0; i < aColor.length; i++) {
var hex = Number(aColor[i]).toString(16);
hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位
if (hex === "0") {
hex += hex;
}
strHex += hex;
}
if (strHex.length !== 7) {
strHex = _this;
}
return strHex;
} else if (reg.test(_this)) {
var aNum = _this.replace(/#/, "").split("");
if (aNum.length === 6) {
return _this;
} else if (aNum.length === 3) {
var numHex = "#";
for (var i = 0; i < aNum.length; i += 1) {
numHex += (aNum[i] + aNum[i]);
}
return numHex;
}
} else {
return _this;
}
}
export {gradientColor}使用
javascript
let colors = new gradientColor("#000", "#FFFFFF", 10)
console.log(colors)
// 输出
['rgb(0,0,0)','rgb(25,25,25)','rgb(51,51,51)','rgb(76,76,76)','rgb(102,102,102)','rgb(127,127,127)',
'rgb(153,153,153)','rgb(178,178,178)','rgb(204,204,204)','rgb(229,229,229)']随机 10–100 之间 10 个数字
javascript
let iArray = []
function getRandom(istart, iend) {
var iChoice = iend - istart + 1
return Math.floor(Math.random() * iChoice + istart)
}
for (var i = 0; i < 10; i++) {
iArray.push(getRandom(10, 200))
}
iArray.sort((a, b) => a - b)
console.log(iArray)提取 URL 中 GET 参数
有这样⼀个 URL : http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e
javascript
function serilizeUrl(url) {
var result = {};
url = url.split("?")[1];
var map = url.split("&");
for (var i = 0, len = map.length; i < len; i++) {
result[map[i].split("=")[0]] = map[i].split("=")[1];
}
return result;
}
console.log(serilizeUrl( 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e'))获取查询参数
可以使⽤ window 对象的属性,获取 URL 中的参数
javascript
window.location.search如果⼀个 URL 为 https://www.baidu.com?project=js&type=1,那么通过上⾯操作就会获取到 ?project=js&type=1。如果在想获取到其中某⼀个参数,可以这样:
javascript
let type = new URLSearchParams(location.search).get('type');计算代码性能
可以使⽤以下操作来计算代码的性能:
javascript
const startTime = performance.now();
// 某些程序
for(let i = 0; i < 1000; i++) {
console.log(i)
}
const endTime = performance.now();
const totaltime = endTime - startTime;
console.log(totaltime); // 30.299999952316284