Saber 酱的抱枕

Fly me to the moon

08/20
2015
学习

解决火狐不支持jq动画的backgroundPosition属性的方法

现在排版的网站中有一个地方,指示器的位置需要变化,我用jQuery做了动画,把这个指示器设置为背景图,然后使用backgroundPosition属性来使其移动。

可是今天测试兼容性的时候发现在火狐下这个动画无效。百度一番,找到了解决办法。参见此处

解决这个问题之前(火狐中无效)的动画代码如下:

$("#anlilist").animate({
	backgroundPositionX:bgLeft+"px",
	backgroundPositionY:"0px"
},100);

这时候X和Y值要分别定义,否则chrome中是无效的。

要解决火狐中无效的问题,先在动画的代码之前加入以下代码:

/**
 * 自定义backgroundPosition的animate,支持火狐,jQuery1.8以上版本
 * @author Meleong
 * v1.00
 */
(function($) {
    $.fx.step["backgroundPosition"] = function(fx) {
        if (typeof fx.end == 'string') {
            fx.start = getBgPos(fx.elem);
            //fx.end原本是一个string,这里将它转换成数组,就不会再进入这个if,也方便我们下面的计算
            //例 "0px -21px"
            fx.end = [parseFloat(fx.end.split(" ")[0]), parseFloat(fx.end.split(" ")[1])];
        }
        //这里fx.pos是根据传入的时间参数,从0到1变化的浮点数
        var nowPosX = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit;
        var nowPosY = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit;
        fx.elem.style.backgroundPosition = nowPosX + ' ' + nowPosY;
        
        /**
         * 获取backgroundPosition数组[top, left],没有单位
         */
        function getBgPos(elem) {
            var top  = 0.0;
            var left = 0.0;
            if ($(elem).css("backgroundPosition")) {
                //例 "0px -21px"
                top  = parseFloat($(elem).css("backgroundPosition").split(" ")[0]);
                left = parseFloat($(elem).css("backgroundPosition").split(" ")[1]);
            }else{
                top  = parseFloat($(elem).css("backgroundPositionX"));
                left = parseFloat($(elem).css("backgroundPositionY"));
            }
            return [top, left];
        }
    }
})(jQuery);

然后改一下动画的代码,把X和Y的值写在一起就行了。

$("#anlilist").animate({
		backgroundPosition: bgLeft.toString()+"px 0px"
},100);

这样写一起chrome里也是能用的,分开写chrome里反而无效了。此时,IE、chrome、firefox三大浏览器里都可以正常实现动画效果了。
Read More →

解决火狐不支持jq动画的backgroundPosition属性的方法

08/15
2015
学习

bootstrap的tooltip插件使用


百度了一些tooltip插件,后来感觉bootstrap的这个tooltip插件比较顺眼,于是鼓捣一番,会简单的使用了。

上例的代码如下:

<script src="http://apps.bdimg.com/libs/jquery/1.9.0/jquery.js"></script>
<script src="/f/bootstrap-tooltip.js"></script>
<link rel="stylesheet" href="/f/bootstrap_tooltip.css"/>
<script>
	$(function () { $("[data-toggle='tooltip']").tooltip(); });	//启用页面中的所有的工具提示(tooltip)
</script>
<img src="/f/穹妹%20小图.jpg" alt="" data-toggle="tooltip" data-placement="bottom" title="不要羡慕我的床"/>
<br /><br />
<a href="saber.我爱你" data-toggle="tooltip" title="这是一个hentai网站">saber酱的抱枕</a>
<br /><br />
<span data-toggle="tooltip" data-placement="right" title="原来saber是我的剑鞘啊~">最爱saber啦~</span>
<br /><br />
<div data-toggle="tooltip" title="练习~练习~">练习~练习~</div>

原理是触发时添加html元素和class类,提示的样式是css实现的,无需图片,所以我们只需要处理代码就行了。
Read More →

bootstrap的tooltip插件使用

08/14
2015
学习

使用灰度滤镜将网页变成灰色

代码如下:

html{
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: gray;
}

chrome下效果完美,火狐中body的背景图片没有变灰,IE11中完全无效。对于IE应该可以兼容到IE9。

我花了半个多小时,测试了各种方法,除了各种css外,还找过用js创建canvas的代码,或是使用某jq插件,最后也没成功实现全浏览器通吃。css的方法最简单,不过兼容性不怎么让人满意。

chrome是使用了-webkit-filter: grayscale(100%)这一项,火狐中生效的是filter:grayscale(100%)。

IE10和IE11在图像滤镜方面还是比较坑爹的,不能执行filter滤镜,而且连svg滤镜也不支持。

使用chrome的话可以玩玩下面这个小玩意:

可以重复点哦。

代码如下:

<button id="setGray">设置网页的灰度</button>
<script>
$("#setGray").click(
	function setGray () {
		var grayCss="-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%); filter: grayscale(100%);";
		var num=prompt("请输入您希望的灰度(正整数)","");
		if (num!=100) {
			grayCss=grayCss.replace(/100/g, num);
		};
		$("html").attr("style",grayCss);
	}
)
</script>

以上真是蛋疼之作,不知道会有地方用到不。

使用灰度滤镜将网页变成灰色

08/7
2015
学习

js做的获取验证码倒计时效果



今天想到了验证码倒计时的效果,于是做了一个出来。

发现定时器里面写函数名的话,如果带了括号,函数会瞬间执行多次。

代码如下:

<form action="">
	<input type="text">    <input type="button" id="getyzm" value="获取验证码">
</form>
<script>
	function yzmdjs (id,time) {
		var getyzm=document.getElementById(id);
    	var getyzmYuan=getyzm.value;
    	getyzm.setAttribute("disabled","disabled");
    	time=time;
    	getyzm.value=time+"秒后可重新获取验证码";
    	daojishiT=setTimeout(daojishi(),1000);
    	function daojishi () {
	    	//console.log(time);
    		time--;
    		getyzm.value=time+"秒后可重新获取验证码";
    		if (time==0) {
    			getyzm.value=getyzmYuan;
    			getyzm.removeAttribute("disabled");
    		}else{
    			daojishiT=setTimeout(daojishi,1000);
    		};
    	}	    	
	}
	document.getElementById("getyzm").onclick=function  (argument) {
		//添加发送验证码的操作
		yzmdjs(this.id,10);
	}
</script>

js做的获取验证码倒计时效果

08/7
2015
学习

js获取获得了焦点的元素

刚才有个同学问了个问题,div里面有个超链接,但点击div时中的其他地方时,也有事件。这样如果点击超链接了,会同时触发“页面跳转”和“div上的事件”这两个事件。我们当然希望这两个事件互不影响。

后来我想到以前看过用js获取当前焦点元素的办法,找了出来,写了个demo,成功了。用的是document.activeElement属性。

原理就是div上发生onclick事件时,判断是不是里面的a标签获得了焦点。如果不是,则触发div上的事件。

demo如下:

<div id="a" style="border:1px solid #f00;width:300px;height:100px;">
	<a href="bbbbb" id="b" target="_blank">bbbbbbb</a>
</div>
<script>
	document.getElementById("a").onclick =function  (argument) {
		if(document.activeElement!=document.getElementById("b")){
			window.open("aaaaa");
		};
	}
</script>

经过试验发现,div是获取不到焦点的。简单的说,table不到div。如果点击div,获取焦点的是body元素。

之前我们想过做定位,让div和超链接处在不同的z-index上,经过试验,没用。但今天想到的有个思路看情况是可以选择使用的:

首先给内部元素设置一个属性,默认为false。当鼠标经过内部元素时,变为true。这样就可以判断点击发生时,点击区域是不是在内部元素上了。

js获取获得了焦点的元素

07/21
2015
学习

一个樱花飞舞的jq特效

<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.8.1/jquery.min.js"></script>
<script src="/f/jquery-sakura.min.js"></script>
<link type="text/css" rel="stylesheet" media="screen" href="/f/jquery-sakura.min.css" />
<script>
// domReady
$(function() {
$('body').sakura();
});
// windowLoad
$(window).load(function() {
$('body').sakura();
});
</script>

转自离别歌,十几岁已经完爆我了。

页面太长的话可能会导致有点卡顿。jq版本不知有无影响。

查看demo

一个樱花飞舞的jq特效

07/21
2015
学习

js左右切换带控制按钮的banner

之前发了个《js左右切换展示的效果》,作用是在小区域内展示内容并且可以左右来回切换。放在大区域用就不合适了,于是改大之后加上了指示器,加上了指示器跳转,加上了自动播放,改到最后改成了banner……很无语,单独放出来吧。

代码也很简单,需要修改功能的话也不难。

查看demo

js左右切换带控制按钮的banner

07/21
2015
学习

js左右切换展示的效果

今天设计的专题里有一块是要左右切换展示几位医生,写了这个效果之后单独摘出来做了个demo,方便以后使用。

我做的时候展示的区域很小,demo里给改大了。但是大了之后没有指示器,看起来很不正常,所以这个demo只适合小区域的、切换数量少的展示。可以做banner或者大区域内容展示的请看此处

这个没有指示器,不会自动切换,也不会首尾循环切换。有了上面那个,这个基本就没用了。

查看demo

要点如下:
li(或者相当于li的子区域)的class设置为srcoll_li;
ul宽度设置为所有li的宽度之和,然后li浮动。
用ul外层元素的超出隐藏来防止乱版。

js左右切换展示的效果

07/11
2015
学习

用js筛选P站动态中的投稿作品

当你查看P站左上角的“动态”页面时,会发现里面的动态分为两种,一种是别人收藏了某个作品的消息,另一种就是画师的投稿了。关注的人多的话,收藏的动态会多于投稿的动态。(吐槽下以前我关注的一个画师是收藏狂魔,动态往下翻几页全都是他的收藏,几乎看不到别人的动态,无奈之下我取消关注了。

有时候,我想单独看看投稿作品,但是没有发现这个功能开关。于是自己动手,写了段简单的js来筛选投稿动态:
window.onscroll=function () {
var allList=document.getElementsByClassName("stacc_status");
for (var i = 0; i < allList.length; i++) { if(allList[i].getElementsByClassName("stacc_type_message_add_illust").length==0){ allList[i].style.display="none"; } }; }[/code] 在浏览器的控制台执行,之后当页面滚动时,会把不是投稿的动态隐藏掉,这样就只剩下投稿的动态了。 有时候,在页面滚动后会加载新的动态。要对这些新动态进行筛选的话就需要再滚一下。

用js筛选P站动态中的投稿作品