1.驼峰命名=>中横线命名
function kebabCase(str) {
const hyphenateRE = /([^-])([A-Z])/g;
return str
.replace(hyphenateRE, '$1-$2')
.replace(hyphenateRE, '$1-$2')
.toLowerCase();
}
kebabCase("aBXC")
2.驼峰命名<=中横线命名
function camelCase(name) {
const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
const MOZ_HACK_REGEXP = /^moz([A-Z])/;
return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
return offset ? letter.toUpperCase() : letter;
}).replace(MOZ_HACK_REGEXP, 'Moz$1');
}
camelCase("n-ww-m")
camelCase("-n-ww-m")
链接
3.获取dom
元素的样式
function getStyle(element, styleName) {
if (!element || !styleName) return null;
styleName = camelCase(styleName);
if (styleName === 'float') {
styleName = 'cssFloat';
}
try {
const computed = document.defaultView.getComputedStyle(element, '');
return element.style[styleName] || computed ? computed[styleName] : null;
} catch (e) {
return element.style[styleName];
}
}
链接
4.rem
动态屏幕适配解决方案
function calculateRem(doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
reCalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth >= 1280) {
docEl.style.fontSize = '100px';
} else {
docEl.style.fontSize = 100 * (clientWidth / 1280) + 'px';
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, reCalc, false);
doc.addEventListener('DOMContentLoaded', reCalc, false);
}
链接
5.元素显隐切换
function toggle(ele) {
let display = getStyle(ele, 'display');
display = display === 'none' ? 'block' : 'none';
ele.style.display = display;
}
链接1 链接2
6.dom
元素添加移除类
function addClass(obj, cls) {
var obj_class = obj.className,
blank = (obj_class != '') ? ' ' : '';
var added = obj_class + blank + cls;
obj.className = added;
}
function removeClass(obj, cls) {
var obj_class = ' ' + obj.className + ' ';
obj_class = obj_class.replace(/(\s+)/gi, ' '),
removed = obj_class.replace(' ' + cls + ' ', ' ');
var removed = removed.replace(/(^\s+)|(\s+$)/g, '');
obj.className = removed;
}
链接
7.悬浮某一元素,显示另一元素
function enterLeave(showElements, hideElement, showEnterFn, showLeaveFn, ctx, capture) {
var leave = false, timer = null;
if (Object.prototype.toString.call(showElements).indexOf('array') == -1
&& Object.prototype.toString.call(showElements).indexOf('NodeList') == -1) {
showElements = [showElements];
}
for (var s = 0; s < showElements.length; s++) {
var showElement = showElements[s];
(function (showElement, idx) {
showElement.addEventListener('mouseenter', function (evt) {
if (typeof capture === 'function' && capture()) {
return;
}
leave = false;
hideElement.style.display = 'block';
if (showEnterFn) {
if (!ctx) {
ctx = showElement;
}
showEnterFn.call(ctx, evt, showElement, idx);
}
});
showElement.addEventListener('mouseleave', function (evt) {
if (typeof capture === 'function' && capture()) {
return;
}
mouseLeave();
if (showLeaveFn) {
if (!ctx) {
ctx = showElement;
}
showLeaveFn.call(ctx, evt, showElement);
}
});
})(showElement, s);
}
hideElement.addEventListener('mouseenter', function () {
leave = false;
});
hideElement.addEventListener('mouseleave', mouseLeave);
function mouseLeave() {
leave = true;
if (timer) {
return;
}
timer = setTimeout(function () {
if (leave) {
hideElement.style.display = 'none';
}
timer = null;
}, 200);
}
}
链接
7.时间戳
function timeago(dateTimeStamp){
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var week = day * 7;
var halfamonth = day * 15;
var month = day * 30;
var now = new Date().getTime();
var dateTime = new Date(dateTimeStamp).getTime()
var diffValue = now - dateTime;
if(diffValue < 0){
return;
}
var minC = diffValue/minute;
var hourC = diffValue/hour;
var dayC = diffValue/day;
var weekC = diffValue/week;
var monthC = diffValue/month;
if(monthC >= 1 && monthC <= 3){
result = " " + parseInt(monthC) + "月前"
}else if(weekC >= 1 && weekC <= 3){
result = " " + parseInt(weekC) + "周前"
}else if(dayC >= 1 && dayC <= 6){
result = " " + parseInt(dayC) + "天前"
}else if(hourC >= 1 && hourC <= 23){
result = " " + parseInt(hourC) + "小时前"
}else if(minC >= 1 && minC <= 59){
result =" " + parseInt(minC) + "分钟前"
}else if(diffValue >= 0 && diffValue <= minute){
result = "刚刚"
}else {
var datetime = new Date();
datetime.setTime(dateTime);
var Nyear = datetime.getFullYear();
var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
result = Nyear + "-" + Nmonth + "-" + Ndate
}
return result;
}