零碎代码大杂烩
移动端滑动
// 增加移动端滑动
var startX, endX;
var mlen;
self.on('touchstart', function(e){
// e.cancelable && e.preventDefault();
var touch = e.originalEvent.changedTouches[0];
startX = touch.pageX;
}).on('touchend', function(e){
// e.cancelable && e.preventDefault();
var _touch = e.originalEvent.changedTouches[0];
endX = _touch.pageX,
mlen = endX - startX;
if(mlen > 0){
// left(); todo:左滑处理
}else if(mlen < 0 ){
// right(); todo:右滑处理
}
})
获取url 参数
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
parseQuery
var decode = decodeURIComponent;
function parseQuery (query) {
var res = {};
query = query.trim().replace(/^(\?|#|&)/, '');
if (!query) {
return res
}
query.split('&').forEach(function (param) {
var parts = param.replace(/\+/g, ' ').split('=');
var key = decode(parts.shift());
var val = parts.length > 0
? decode(parts.join('='))
: null;
if (res[key] === undefined) {
res[key] = val;
} else if (Array.isArray(res[key])) {
res[key].push(val);
} else {
res[key] = [res[key], val];
}
});
return res
}
js 节流
function throttle(method) {
if(method.tId) clearTimeout(method.tId);
var args = Array.prototype.slice.apply(arguments);
args.shift();
method.tId = setTimeout(function(){
method.apply({}, args);
}, 400);
}
js 时间格式转换
export function dateFormate (long, fmt) {
let date = new Date(long)
var o = {
"M+": date.getMonth()+1, //月份
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth()+3)/3), //季度
"S": date.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
return fmt;
}
// 使用
dateFormate(1465811871000, 'yyyy-MM-dd');
求对称数
/**
* 求对称数
* @param {*} limit
*/
function symmetry(limit = 10000) {
var result = [];
for (let i = 1; i < 10; i++) {
if (i * 11 <= limit) result.push(i * 11)
for (let j = 0; j < 10; j++) {
let k = 1
let o = (i * Math.pow(10, k + 1) + i)
let m = (Math.pow(10, k) * j)
while (o + m < limit && k ++) {
result.push(o + m)
o = i * Math.pow(10, k + 1) + i
m = m + Math.pow(10, k) * j
}
}
}
return result
}
// 上述代码输出结果:[ 11, 22, 33, 44, 55, 66, 77, 88 ]
根据value 找对象中的key
const findKey = function findKey(obj, value, pkey=null) {
let hit = []
Object.keys(obj).forEach(item => {
const v = obj[item]
const k = pkey ? `${pkey}.${item}` : item
if(typeof v === 'string' || typeof v === 'number') {
if(v === value) hit.push(k)
} else if (v instanceof Array) {
v.length && Array.prototype.forEach.call(v, (_i) => {
if(_i === value) {
hit.push(k)
}
})
} else {
hit = hit.concat(findKey(obj[item], value, k))
}
})
return hit
}
const obj = { 'a': ['a1', 'a2', 'a3'], 'b': { 'bb': ['bb1', 'bb2'] } }
var result = findKey(obj, 'a1') // [ 'a' ]
result = findKey(obj, 'bb1') // [ 'b.bb' ]
树结构根据指定key 转换为树图
/**
* 构造树图结构: return 指向父节点 child 指向首个子节点 sibling 指向兄弟
* @param {*} tree
* @returns 映射表
*/
generateTreeMap: function (tree, key) {
if (!tree) return;
const nodeArr = Array.isArray(tree) ? tree : [tree];
const resultMap = {};
function createNode (ret, child, sibling, node) {
if (resultMap[node[key]]) return resultMap[node[key]];
return { return: ret, child, sibling, node };
}
function reconcileChildren (children, pFiber) {
if (!children) return;
let preSibling;
for (let i = 0; i < children.length; i++) {
const child = children[i];
const vFiber = createNode(pFiber, null, null, child);
if (i === 0) {
pFiber.child = vFiber;
preSibling = vFiber;
} else {
const preFiber = createNode(pFiber, null, null, preSibling.node);
preFiber.sibling = vFiber;
preSibling = vFiber;
}
// 添加到resultMap
resultMap[child[key]] = vFiber;
}
for (let i = 0; i < children.length; i++) {
const child = children[i];
const vFiber = createNode(pFiber, null, null, child);
reconcileChildren(child.children, vFiber);
}
}
// 创建根节点
const rootNode = createNode(null, null, null, tree);
// 根节点存入resultMap
resultMap[tree[key]] = rootNode;
reconcileChildren(nodeArr, rootNode);
return resultMap;
}
(未完,待续…)