Last active
June 21, 2020 16:49
-
-
Save XiongJingzhi/52c1a9b2338bd18526bc186db958a118 to your computer and use it in GitHub Desktop.
JavaScript utils 代码
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://github.com/cdoco/common-regex | |
'1231231.4314'.replace(/\B(?=(\d{3})+(?!\d))/g, ',') | |
会切割小数点后 | |
'1231231.4314'.replace(/(?<!\.\d*)\B(?=(\d{3})+(?!\d))/g, ",") | |
px 转成 vw | |
" margin: 42px 15px 15px 15px;".replace(/(\s)(?=\d*px)/g, ' \(').replace(/px/g, 'vw\/3.75\)') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs') | |
const path = require('path') | |
const changeName = (old, removeStirng) => { | |
const index = old.indexOf(removeStirng) | |
if (index > 0) { | |
const suffix = old.slice(old.lastIndexOf('.')) | |
const newName = old.slice(0, index) + suffix | |
fs.rename(old, newName, function(err) { | |
if ( err ) console.log('changeName ERROR: ' + err); | |
}) | |
} | |
} | |
function isFile(dir) { | |
return fs.statSync(dir).isFile() | |
} | |
const getNames = dir => { | |
return new Promise((res, rej) => { | |
fs.readdir(dir, (err, files) => { | |
if (err) { | |
rej(err) | |
} else { | |
const names = files.map(i => path.join(dir, i)) | |
res(names) | |
} | |
}) | |
}) | |
} | |
const parseDir = () => { | |
const args = process.argv.slice(2) | |
return [args[0], args[1]] | |
} | |
const changeNameAll = (dir, removeStirng) => { | |
getNames(dir) | |
.then(names => { | |
names.forEach(item => { | |
if (isFile(item)) { | |
changeName(item, removeStirng) | |
} else { | |
changeNameAll(item, removeStirng) | |
} | |
}) | |
}) | |
.catch(err => { | |
console.log('getNames err: ', err) | |
}) | |
} | |
const main = () => { | |
const [dir, removeStirng] = parseDir() | |
changeNameAll(dir, removeStirng) | |
} | |
// 批量改名软件,args 绝对路径 去除特殊字符串 | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function encodeUTF8(s) { | |
var i, r = [], c, x; | |
for (i = 0; i < s.length; i++) | |
if ((c = s.charCodeAt(i)) < 0x80) r.push(c); | |
else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F)); | |
else { | |
if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode | |
c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000, | |
r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F)); | |
else r.push(0xE0 + (c >> 12 & 0xF)); | |
r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F)); | |
}; | |
return r; | |
}; | |
function sha1(s) { | |
var data = new Uint8Array(encodeUTF8(s)) | |
var i, j, t; | |
var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2); | |
s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer); | |
for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2); | |
s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8); | |
s[l - 1] = data.length << 3; | |
var w = [], f = [ | |
function () { return m[1] & m[2] | ~m[1] & m[3]; }, | |
function () { return m[1] ^ m[2] ^ m[3]; }, | |
function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; }, | |
function () { return m[1] ^ m[2] ^ m[3]; } | |
], rol = function (n, c) { return n << c | n >>> (32 - c); }, | |
k = [1518500249, 1859775393, -1894007588, -899497514], | |
m = [1732584193, -271733879, null, null, -1009589776]; | |
m[2] = ~m[0], m[3] = ~m[1]; | |
for (i = 0; i < s.length; i += 16) { | |
var o = m.slice(0); | |
for (j = 0; j < 80; j++) | |
w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1), | |
t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0, | |
m[1] = rol(m[1], 30), m.pop(), m.unshift(t); | |
for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0; | |
}; | |
t = new DataView(new Uint32Array(m).buffer); | |
for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2); | |
var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) { | |
return (e < 16 ? "0" : "") + e.toString(16); | |
}).join(""); | |
return hex; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function compress(img) { | |
// 图片压缩 | |
var canvas = document.createElement('canvas') | |
var ctx = canvas.getContext('2d') | |
// 瓦片canvas | |
var tCanvas = document.createElement('canvas') | |
var tctx = tCanvas.getContext('2d') | |
var width = img.width | |
var height = img.height | |
// 如果图片大于四百万像素,计算压缩比并将大小压至400万以下 | |
var ratio | |
if ((ratio = (width * height) / 4000000) > 1) { | |
ratio = Math.sqrt(ratio) | |
width /= ratio | |
height /= ratio | |
} else { | |
ratio = 1 | |
} | |
canvas.width = width | |
canvas.height = height | |
// 铺底色 | |
ctx.fillStyle = '#fff' | |
ctx.fillRect(0, 0, canvas.width, canvas.height) | |
// 如果图片像素大于100万则使用瓦片绘制 | |
var count | |
if ((count = (width * height) / 1000000) > 1) { | |
count = ~~(Math.sqrt(count) + 1) // 计算要分成多少块瓦片 | |
// 计算每块瓦片的宽和高 | |
var nw = ~~(width / count) | |
var nh = ~~(height / count) | |
tCanvas.width = nw | |
tCanvas.height = nh | |
for (var i = 0; i < count; i++) { | |
for (var j = 0; j < count; j++) { | |
tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio, nh * ratio, 0, 0, nw, nh) | |
ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh) | |
} | |
} | |
} else { | |
ctx.drawImage(img, 0, 0, width, height) | |
} | |
// 进行最小压缩 | |
var ndata = canvas.toDataURL('image/jpeg', 0.8) | |
// console.log('压缩前:' + initSize); | |
// console.log('压缩后:' + ndata.length); | |
// console.log('压缩率:' + ~~(100 * (initSize - ndata.length) / initSize) + "%"); | |
tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0 | |
return ndata | |
} | |
function getBlob(buffer, format) { | |
try { | |
return new Blob(buffer, { type: format }) | |
} catch (e) { | |
var bb = new (window.BlobBuilder || | |
window.WebKitBlobBuilder || | |
window.MSBlobBuilder)() | |
buffer.forEach(function(buf) { | |
bb.append(buf) | |
}) | |
return bb.getBlob(format) | |
} | |
} | |
function upimg(db) { | |
return new Promise((resolve, reject) => { | |
var img = new Image() | |
img.onload = () => { | |
db.content.length | |
var base64 = compress(img) | |
if (base64.length / db.content.length < 0.02) { | |
return reject('请控制上传图片大小') | |
} | |
var text = window.atob(base64.split(',')[1]) | |
var buffer = new Uint8Array(text.length) | |
for (var i = 0; i < text.length; i++) { | |
buffer[i] = text.charCodeAt(i) | |
} | |
var blob = getBlob([buffer], db.file.type) | |
resolve(blob) | |
} | |
img.src = db.content | |
}) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[...Array(n).keys()] | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function ajax(method, url, data, reseponseCallback) { | |
var r = new XMLHttpRequest() | |
// 设置请求方法和请求地址 | |
r.open(method, url, true) | |
// 设置发送的数据的格式 | |
r.setRequestHeader('Content-Type', 'application/json') | |
// 注册响应函数 | |
r.onreadystatechange = function() { | |
if (r.readyState === 4) { | |
// console.log('ready state == 4') | |
var data = JSON.parse(r.response) | |
// console.log('ready state. data', data) | |
reseponseCallback(data) | |
} | |
// console.log('on state change', r) | |
} | |
// 发送请求 | |
data = JSON.stringify(data) | |
r.send(data) | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function timeFormat(timestamp) { | |
const format = (data) => data > 10 ? data : '0' + data | |
const time = new Date(timestamp) | |
const year = time.getFullYear() | |
let month = time.getMonth() + 1 | |
month = format(month) | |
let day = time.getDate() | |
day = format(day) | |
let hour = time.getHours() | |
hour = format(hour) | |
let minute = time.getMinutes() | |
minute = format(minute) | |
let second = time.getSeconds() | |
second = format(second) | |
return `${year}-${month}-${day} ${hour}:${minute}:${second}` | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment