自己整理的代码库

290 阅读1分钟

目前有记录过的一些功能代码库,以后会不断更新

纯JS中文数组按首字母排序

pySegSort(arr,empty) {
    if(!String.prototype.localeCompare){
        return null;
    }

    var letters = "*abcdefghjklmnopqrstwxyz".split('');
    var zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('');

    var segs = [];
    var curr;
    for(let i in letters){
        curr = {letter: letters[i].toUpperCase(), data:[]};
        for(let j in arr){
            let jx = new String(arr[j])

            if((!zh[i-1] || zh[i-1].localeCompare(jx,"zh") <= 0) && jx.localeCompare(zh[i],"zh") == -1) {
                curr.data.push(jx.replace(/"/g,""));
            }
        }
        if(empty || curr.data.length) {
            segs.push(curr);
            curr.data.sort(function(a,b){
                return a.localeCompare(b,"zh");
            });
        }
    }
    return segs;
}

js 带动画的置顶滚动

生硬版:

var scrollToTop = window.setInterval(function() {
    var pos = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
    if ( pos > 0 ) {
        window.scrollTo( 0, pos - 20 ); // 每fps移动距离
    } else {
        window.clearInterval( scrollToTop );
    }
}, 16); // 大约60fps

流畅版:

(function smoothscroll(){
    var currentScroll = document.documentElement.scrollTop || document.body.scrollTop || window.pageYOffset;
    if (currentScroll > 0) {
       window.requestAnimationFrame(smoothscroll);
       window.scrollTo (0,currentScroll - (currentScroll/5));
    }
})();

大数相加

function addBigInt(x, y) {
    x = x + '';
    y = y + '';

    let big, small;
    if (x.length > y.length) {
        big = x;
        small = y;
    } else {
        big = y;
        small = x;
    }

    let resultArr = [];
    let flag = 0;
    let pos = 0;

    while (true) {
        let newVal;
        let biglen = big.length-1 - pos;
        let smalllen = small.length-1 - pos;
        pos++;

        if (smalllen >= 0) {
            newVal = 1 * big[biglen] + 1 * small[smalllen] + flag;
        } else if (flag) {
            newVal = 1 * big[biglen] + flag;
        } else {
            newVal = -1;
        }

        if (newVal > 10) {
            resultArr.unshift(newVal - 10);
            flag = 1;
        } else if (newVal > 0) {
            resultArr.unshift(newVal);
            flag = 0;
        } else {
            resultArr.unshift(big.slice(0, biglen+1));
            break;
        }
    }
    return resultArr.join('');
}

取消已选中的选区

window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty()

生成随机像素测试图

const canvas = document.createElement("canvas");
const w = 4096;
const h = 3112;


// 绘制随机颜色像素
canvas.setAttribute("width", w);
canvas.setAttribute("height", h);
document.body.innerHTML = "";
document.body.appendChild(canvas);
const ct = canvas.getContext("2d");

const dropContent = ct.getImageData(0, 0, w, h)
for (i = 0; i < h; i++) {
	for (j = 0; j < w; j++) {
		const s = (i * w + j) * 4;
		dropContent.data[s] = Math.floor(Math.random() * 256);
		dropContent.data[s + 1] = Math.floor(Math.random() * 256);
		dropContent.data[s + 2] = Math.floor(Math.random() * 256);
		dropContent.data[s + 3] = 255;
	}
}
ct.putImageData(dropContent, 0, 0);

// canvas转base64
const dataurl = canvas.toDataURL('image/jpeg');

// base64转file
const arr = dataurl.split(',');
const mime = arr[0]?.match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
}
const file = new File([u8arr], 'temp', { type: mime });

// 下载file文件
const a = document.createElement("a");
const url = URL.createObjectURL(file);
a.href = url;
a.download = 'test.jpeg';
document.body.appendChild(a);
a.click();

// window.open(canvas.toDataURL('image/jpeg'));