Saber 酱的抱枕

Fly me to the moon

02/5
2016
学习

实现从父窗口中监测iframe的Ready事件的办法

试想如果我们创建了一个iframe,然后需要访问其中的元素。这时候我们可以对iframe使用onload事件,在其完全载入后执行我们需要的操作。

但是onload事件需要等到图片等资源完全加载完成才执行,这时我想到了jquery的ready()方法,在DOM加载完成后即可执行,更加省时。

但是jquery的ready()方法对框架是无效的。然后我去寻找JavaScript原生的事件,以此来代替jquery的ready()方法。今天终于找到了可行的办法,也是用JavaScript原生的事件做的,实现了和jquery的ready()方法类似的效果。这个代码封装成了函数,我们使用的时候在父窗口调用即可。

代码比较长,我就贴下边了。
Read More →

实现从父窗口中监测iframe的Ready事件的办法

01/26
2016
学习

使用flexslider做图片切换效果

编辑:由于 demo 里引用的图片网址已经不存在(以前的七牛云网址),所以图片不会显示了。

flexslider官网 使用参考

简单地说,flexslider是个图片切换插件,依赖于jQuery,提供几种使用场景。使用起来很简单,但如果要对它进行修改那坑也是很多的。我今天用它的基本功能做了个demo。

这个demo外层宽度是100%,适合做通屏banner切换。这种情况下,为使图片始终居中,使用时需修改.slides img的left值为图片宽度的一半。如1920px的图片则设置为-960px。

如果图片是固定宽度,修改.flexslider的宽度为固定宽度就好。此时用于图片居中的.slides img这行css可以删掉。

前面说这个插件坑,是因为这个插件为了它的demo效果,加了边框、阴影、边距等效果,我用的时候又要去掉。它的指示器在图片区域之外,调到图片上结果被图片挡住了←_← 想用它做通屏切换,又加了一些限制。还有其他问题,在demo里面的css注释中可以看到。费尽心力改完一个又一个坑之后,感觉如果自己写一个出来也早就做完了。

flexslider还有些其他的问题,如找不到官方文档,而网上很多参数根本没用了;鼠标点击指示器才会切换,悬浮不行。

使用flexslider做图片切换效果

01/18
2016
学习

使用网易云音乐API获取歌曲信息

我做了一个简单的音乐播放器,歌曲数据都是来自网易云音乐。之前没找到API,所有歌曲信息都要自己手动添加到xml文件中。经过Misaka酱的帮助,使用了网易的API来接收json格式的歌曲信息,方便了很多。

先看看API:

获取单曲:
http://music.163.com/api/song/detail/?id=28151022&ids=%5B28151022%5D
获取歌单:
http://music.163.com/api/playlist/detail?id=15985919

查看音乐播放器

现在我使用的是第二种方法,就是建立一个歌单,然后获取配置信息。因为它只有一个ajax请求,稳健性非常好。如果使用单曲一个个去请求的话,数量多了可能会出现失败的情况。

这样还有一个优点,那就是如果音乐有变动,不需要改文件了,歌单变了本地列表自然也会跟着变。只是如果要调整歌单内歌曲的顺序的话,得用网易云音乐的客户端才行。
Read More →

使用网易云音乐API获取歌曲信息

12/31
2015
学习

js判断url是否能够访问

我想用js检查网站地图文件里的网址是否都正确,于是找了js判断url是否能够访问的方法。原理是利用jQuery的ajax方法,根据网页状态码来判断网页能否打开。

//判断一个url是否可以访问
function IsLoad(_url){
$.ajax({
url:_url,
type:"get",
success:function(){
//说明请求的url存在,并且可以访问
console.log('请求的url可以访问');
},
statusCode:{
404:function(){
//说明请求的url不存在
console.log('请求的url不可访问');
}
}
});
}
//调用
IsLoad("/music/");

Read More →

js判断url是否能够访问

12/30
2015
学习

js设置和获取cookie的函数

下面代码是把js操作cookie的步骤封装成了函数,可以方便的调用。

//设置cookie,key,value,整数天数(自然天)
function setCookie(name, value,days) {
	var exp = new Date();  
	exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000);
	document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString()+ ";path=/";
}
setCookie("volume",0.5,365);
//其实这里面少了个domain参数,有时候会需要,如最后部分为 ";domain=.ikanman.com;path=/"

//读取cookie
function getCookie(name) {
	var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
	if (arr != null)
	return unescape(arr[2]);
	return null;
}
getCookie("volume");

不过这个函数在设置cookie时没有做对域名的设置。

js设置和获取cookie的函数

12/29
2015
学习

saber酱の音乐播放器

这个html5音乐播放器是我花了一天时间琢磨出来的,因为好歹做了个像样的界面,所以版本姑且就叫1.0了。

使用了cookie来记住播放的音乐、音量和循环模式。没有做后台功能,例如评分、喜欢等。

使用网易云音乐的歌单做歌曲列表。

另外,音乐的缓冲进度条可能加载到中途就停止了,这个浏览器的行为,和本播放器无关。chrome经常会这样,火狐则是一口气加载完。如果有需要的话,浏览器会继续加载。
Read More →

saber酱の音乐播放器

12/26
2015
学习

筛选pixiv搜索页面中的作品

p站会员过期了,无法直接按收藏数搜索了。普通用户看到的作品貌似是按时间排序的,这里面质量参差不齐,为了快速筛选高素质的作品,搞了下面这个小玩意,可以把收藏数低于指定标准的作品从页面中删除:

var wantNum=100;
var allPicArea=$(".autopagerize_page_element .image-item");
for (var i = 0; i <allPicArea.length; i++) {
	if (allPicArea.eq(i).find("._ui-tooltip").length==0||allPicArea.eq(i).find("._ui-tooltip").eq(0).text()<wantNum) {
		allPicArea.eq(i).remove();
	};
};

直接在控制台执行就可以,这个100用的时候自己改吧。

虽然使用了jQuery,但p站页面引用的有,我们不用自己再引用了。

ps:写的时候犯了低级错误,应该用find()的,用成了children(),还是用的太少了。

筛选pixiv搜索页面中的作品

12/18
2015
学习

js自定义鼠标双击事件以及对其的一些思考

昨天在做图的痛苦煎熬中,忽然脑子一抽想到了鼠标双击事件(看啊,我不得不思考代码以减轻做图的痛苦了。可见做图是多么惨无人道的事情)。于是鼓捣了两个玩意出来。

第一个代码是自定义鼠标双击事件。我们知道,JavaScript的鼠标双击事件(ondblclick)的判定时间是有阈值的。如果我们想自己定义,例如必须间隔在200毫秒以内才算双击,又比如想把时间间隔延长到1000毫秒。这时候可以自己设置时间阈值,满足条件就执行事件代码:

var click0=null;//第一次点击的时间戳
var clickTimeOut=500;//自定义允许的时间间隔
document.onclick=function  () {
	var d=new Date();
	if(click0==null){
		click0=d.getTime();
	}else{
		if(d.getTime()-click0>clickTimeOut){
			//console.log("不是双击");
			click0=d.getTime();
		}else{
			console.log("一次双击");
			click0=null;//初始化
		}
	}
}

这个和浏览器的判定应该是一样的了(至少从结果来看)。这也是数次修改之后的结果,改进的地方有(完全可以不看):

1.把相邻两次单击进行判断。例如鼠标点击了3次,第1次和第2次的间隔超时,第2次和第3次间隔在规定时间内。可以把第2和第3次点击识别为双击,而不是必须1、2判断一次,3、4再判断一次。

2.但是当一次双击事件触发之后,必须再进行至少两次单击才可以触发双击判定。例如3次单击间隔都在规定范围内,在把第1次和第2次识别为双击之后,不会把第3次和第2次连起来,认为又是一次双击。
Read More →

js自定义鼠标双击事件以及对其的一些思考

12/8
2015
学习

javascript 函数劫持

以JavaScript中的alert()函数为例,改变它的功能。

var _alert=window.alert;
window.alert=function (s) {
  if (arguments[0].indexOf("萝莉")>=0) {   
    _alert("快看 有小萝莉!");   
  }else{
    _alert("没有萝莉,拒绝执行");   
  };
}
alert("萝莉控");
alert("御姐控");

功能怎么改自然可以随意来,也可以改成压根就不弹。

javascript 函数劫持