为了完成java的作业,先拿js写了一个。暂时只完成了一些简单的运算
分类目录归档:佳佳工具
【工具】listen
今天写了个小工具,用来显示声音的波形和频谱。音源可以是麦或者音乐文件音乐文件可以直接拖入。
在线演示:https://jiajiajiang.github.io/listen/ 或 https://pages.luojia.me/listen/
项目地址:https://github.com/JiaJiaJiang/listen
默认会进入麦克风模式,如果想要显示本地音乐的频谱的话可以直接把音乐拖入。
[Javascript]进制转换
由于coding gists即将关闭,所以把此代码片搬到博客
js的Number支持直接使用toString转换到最多36进制(0-9a-z),而此函数支持转换到由传入进制表定义的任何进制。
默认进制表为0-9a-zA-Z的62进制
/* COPYRIGHT luojia@luojia.me MIT LICENSE */ function conv(n,o,t,olist,tlist){//数,原进制,目标进制[,原数所用字符表,目标字符表] var dlist='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', tnum=[],m,negative=((n+='').trim()[0]=='-'),decnum=0; olist||(olist=dlist); tlist||(tlist=dlist); if(negative)n=n.slice(1); for(var i=n.length;i--;) decnum+=olist.indexOf(n[i])*Math.pow(o,n.length-i-1); for(;decnum!=0;tnum.unshift(tlist[m])){ m=decnum%t; decnum=Math.floor(decnum/t); } decnum&&tnum.unshift(tlist[decnum]); if(tnum.length===0)tnum.unshift(tlist[0]); return (negative?'-':'')+tnum.join(''); } conv(1234,10,2) //"10011010010" conv(15,10,16) //"f" conv('ABC',16,10) //"9846" conv(3245670,10,10,null,'零一二三四五六七八九') //"三二四五六七零" conv('①②③',10,2,'〇①②③④⑤⑥⑦⑧⑨') //"1111011"
bilibili分片视频连接脚本
[Javascript]Object2HTML
把特定格式的js对象转换成HTML元素
https://github.com/JiaJiaJiang/Object2HTML
演示对象
{_:'div',
child:[
{_:'button',prop:{innerHTML:'poi'},event:{'click':function(){alert('niconiconi');}}},
{_:'br'},
{_:'video',prop:{src:'http://www.w3school.com.cn/example/html5/mov_bbb.mp4'},attr:{controls:true}}
]
}
结果
【书签】视频变速
用来把页面上播放的HTML5视频变速,以节省看番时间或者达到慢放暂停看福利的效果。
javascript:var v=document.querySelector('video'),s=prompt('倍度',v.playbackRate);v.playbackRate=Number(s);
保存成书签在视频页点击即可。
OSU mengsky源下图代码
2017/8/28 更新:mengsky已死,如果网络环境连血猫速度快的话可以继续用血猫,否则建议使用代理直接从官网下载。
mengsky源使用的是七牛服务,速度非常快,推荐天朝用户使用。
代码:
javascript:try{window.location="http://osu.mengsky.net/api/download/"+$(".beatmapDownloadButton")[$(".beatmapDownloadButton").length-1].querySelector("a").href.match(/\d+$/)[0];}catch(e){alert("未登录或不在下载页面");}
使用方法见血猫下图代码设置
[Javascript]stringHider
我按照http://ucren.com/blog/archives/549 的思路把字符串转换成零宽字符穿,但是不限代码,可以用来转换任意字符串
项目地址:https://github.com/JiaJiaJiang/stringHider
在线工具:https://jiajiajiang.github.io/stringHider/
============2018/10/14更新===========
修复了无法转换ascii码表以外字符的bug
[Javascript]toDataURI小工具
便于发车的小工具
地址:https://github.com/JiaJiaJiang/toDataURI
选择文本或者文件模式,填好内容或者选择文件
可自定义Content type,一般空着就好
然后点转换。
即可发车。
转换结果让别人粘贴在浏览器地址栏即可。
[Javascript]简易图片对比
Demo:http://pages.luojia.me/image-diff/
用于对两张图片进行像素对比,相同的像素结果为白色,不同的像素结果为黑色。
做这个东西是因为某群在讨论QQ的火炬传递页面到底有没有藏什么东西,为了证明它们真的是一模一样的图片,我就做了这东西。。。
[Javascript]base32编解码
用javascript写了个base32的编解码函数
const charTable=[
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', '2', '3', '4', '5', '6', '7',
'='
],allowedPeddingCount=[6,4,3,1,0];
function str_split(str,length){
if(typeof str !== 'string')return [];
let a=[],i=0;
length||(length=1);
do{
a.push(str.substr(i,length));
i+=length;
}while(i<str.length);
return a;
}
const Base32={
encode:function(str,padding){
if(!str)return '';
let binaryString='';
for (let i = 0;i<str.length;i++) {
let bin=str.charCodeAt(i).toString(2);
binaryString+=('0'.repeat(8-bin.length)+bin);
}
let fiveBitBinaryArray=str_split(binaryString,5),base32='';
for(let i=0;i<fiveBitBinaryArray.length;i++){
let bin=fiveBitBinaryArray[i];
base32+=charTable[parseInt(bin+'0'.repeat(5-bin.length),2)];
}
let x=binaryString.length%40;
if (padding && x != 0) {
if (x == 8)base32+=charTable[32].repeat(6);
else if(x===16)base32+=charTable[32].repeat(4);
else if(x===24)base32+=charTable[32].repeat(3);
else if(x===32)base32+=charTable[32];
}
return base32;
},
decode:function(str){
if(!str)return '';
let paddingMatch=str.match(/\=+$/),
paddingCharCount=paddingMatch?paddingMatch[0].length:0;
if(allowedPeddingCount.indexOf(paddingCharCount)<0)return false;
for (let i=0;i<4;i++){
if (paddingCharCount===allowedPeddingCount[i]
&& str.substr(-(allowedPeddingCount[i]))!=charTable[32].repeat(allowedPeddingCount[i]))
return false;
}
str=str.replace(/\=+$/,'');
let binaryString = "";
for (let i=0;i<str.length;i+=8) {
let x='';
if (charTable.indexOf(str[i])<0)return false;
for (let j=0;j<8;j++) {
let bin=charTable.indexOf(str[i+j]).toString(2);
x+='0'.repeat(5-bin.length)+bin;
}
let eightBits=str_split(x,8);
for (let z = 0; z < eightBits.length; z++) {
let y,cd=parseInt(eightBits[z],2,10);
binaryString+=((y=String.fromCharCode(cd))||cd==48)?y:"";
}
}
return binaryString;
}
}
[Javascript]数字添加千分位符函数
这种函数虽然百度一大把,不过我还是准备自己用很简单的代码写一个。现在访客暴涨然后我发现了在线人数显示功能好多bug,修了一下午。这个函数也是为此功能而写的。
function formatNum(num){
if(typeof num !=="number")return false;//判断是否是数字
num=num.toString();//字符化
var s=num.match(/e\+(\d+)$/),ext=0;;
num=num.replace(/e.+$/,'');
if(s)ext=Number(s[1]);
//分割小数点两边
var tA=num.split('.');
if(tA.length>=2&&ext){//有小数点则分割开来处理(小数点后面可能还跟有科学记数法表示)
if(tA.length>ext){
tA[0]+=tA[1].slice(0,ext-1);
tA[1]=tA[1].slice(ext-1,tA[1].length-1);
}else{
tA[0]+=(tA[1]+"0".repeat(ext-tA.length));
tA[1]='';
}
}
tA[0]=tA[0].split('');//拆字符
for(var i=tA[0].length;(i-=3)>0;){//插逗号
tA[0].splice(i,0,',');
}
return tA[0].join('')+(tA[1]?'.'+tA[1]:'');//连起来
}
示例
> formatNum(652342938443) < "652,342,938,443" > formatNum(98765424621365764512) < "98,765,424,621,365,770,000" //由于js最大能准确表示的数字为9,007,199,254,740,992,所以会得到这个结果 > formatNum(98765424621365764512465421654165343687117361543861243) < "987,654,246,213,657,700,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000" //由于原数在js中会转为科学记数法,所以用0替换 > formatNum(0.55555555555555555555555555555555555555555555555555555) < "0.5555555555555556" //小数点后没有千分位 > formatNum(98765424621.365764512465421654165343687117361543861243) < "98,765,424,621.36577" //同上
OSU血猫刷图书签
这个书签会载入一个js,然后显示一些东西。
如果你不想下一整个曲包但是又要很多map的话可以试试这个东西,它可以随机刷出一批血猫的map下图地址,然后把地址都复制到迅雷之类的下载器下载即可。
用法:把以下代码放进一个书签
javascript:if(window.modloaded!=true){var d=document,s=d.createElement("script");s.src="http://io.luojia.me/code/js/osu/bloodcat-get-new-maps-min.js";d.body.appendChild(s);window.modloaded=true;}else{alert("书签已加载,勿重复点击");}
像这样

然后点一下这个书签
然后你就可以开始愉快的刷图了!
[PHP]清理js文件
花了点时间好好做了个可以清理js文件的php脚本,php确实是个蛋疼的东西,老是出点奇怪的特性。
这个脚本的功能是去掉js文件里的无用部分,输出一个清洁的js文件(当然我不保证这个输出的文件绝对没问题,至少把我的COL放进去输出的文件没问题)
原理:
由于涉及到清理注释,又不能把引号误删,而且 `”` `’` `//` `/*`这四个关键符号是同样优先级的,所以谁先出现,谁的优先级就会高(也就是其他符号都会进入这个符号的作用域里)
比如`”` 先出现了,后面的`’` `//` `/*`都会被包括进这个字符串里,同样如果`/*`先出现了后面的内容都会变成注释,除非碰到`*/` 。
所以我用了个循环来根据先出现的符号进行相应操作。碰到引号就把字符串整个提出来放个锚,即可保持字符串内容,然后就不用再担心字符串的问题了。
迷你弹幕播放器完工
由于文件床难产,弹幕播放器也难产,所以我把弹幕播放器做了个阉割版本,取名叫迷你弹幕播放器。
【经检测此播放器对移动设备不友好,请谨慎观看。】
danmaku.luojia.me已上线,管理页面赶制中。
没有托管到github。
迷你版里我稍微改了一下Glory一直吐槽的图标问题(改了两个,不过剩下的两个看起来就有点不和谐了。。。
然后也做了个CanvasObjLibrary的阉割版,不过似乎也没什么性能上的提升,唯一的好处就是js文件小了。
以下放出正式版本(目测没有后续版本了。。)的演示
继续阅读迷你弹幕播放器完工
OSU快速从血猫下图代码
2024-08-29更新:此方法可能已经失效,且osu lazer已经支持任何用户的游戏内下载,无需再使用第三方镜像了。
把下面这段代码放在一个书签里,然后从OSU里点出map页面以后直接点一下这个书签,就会自动从血猫下载图啦(≧∇≦)
设置方法:复制以下代码,点一下浏览器的添加到收藏夹,清空地址里的内容并把代码粘贴进去,然后随便起个名字,放在书签栏醒目的地方。
javascript:try{window.location="http://bloodcat.com/osu/s/"+$(".beatmapDownloadButton")[$(".beatmapDownloadButton").length-1].querySelector("a").href.match(/\d+$/)[0];}catch(e){alert("未登录或不在下载页面");}
类似这样

[更新]解决在有”Without Video”按钮页面出错的问题
[更新]跟着血猫的地址把m换成了s