编程手札

My Developer Knowledge Base

原创 用JS实现渐变效果,兼容各款浏览器收藏

以住做B/S的系统都是以IE浏览器为主,基本上忽略其他的浏览器,这次决定来个大兼容,但在实现背景渐变上就是个大麻烦。本想用图片来实现的,但要兼顾多种分辨率实在不好办,最后在网上找到一个Javascript的实现办法,兼容IE6/7、FF、Safari等,相当完美。好东西不敢独占,贴出来大家共享:

<SCRIPT>
var setGradient = (function(){
	//private variables;
	var p_dCanvas = document.createElement('canvas');
	var p_useCanvas =  !!( typeof(p_dCanvas.getContext) == 'function');
	var p_dCtx = p_useCanvas?p_dCanvas.getContext('2d'):null;
	var p_isIE = /*@cc_on!@*/false;
	
	//test if toDataURL() is supported by Canvas since Safari may not support it
	try{ p_dCtx.canvas.toDataURL() }
	catch(err){ p_useCanvas = false; };

	if(p_useCanvas){
	    return function (dEl , sColor1 , sColor2 , bRepeatY ){
			if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
			if(!dEl) return false;
			var nW = dEl.offsetWidth;
			var nH = dEl.offsetHeight;
			p_dCanvas.width = nW;
			p_dCanvas.height = nH;

			var dGradient;
			var sRepeat;
			// Create gradients
			if(bRepeatY){
				dGradient = p_dCtx.createLinearGradient(0,0,nW,0);
				sRepeat = 'repeat-y';
			}else{
				dGradient = p_dCtx.createLinearGradient(0,0,0,nH);
				sRepeat = 'repeat-x';
			}		
			
			dGradient.addColorStop(0,sColor1);
			dGradient.addColorStop(1,sColor2);				
			
			p_dCtx.fillStyle = dGradient ; 
			p_dCtx.fillRect(0,0,nW,nH);
			var sDataUrl = p_dCtx.canvas.toDataURL('image/png');
			
			with(dEl.style){
				backgroundRepeat = sRepeat;
				backgroundImage = 'url(' + sDataUrl + ')';
				backgroundColor = sColor2;    
			};
	   }
	}else if(p_isIE){
		p_dCanvas = p_useCanvas = p_dCtx =  null;		
		return function (dEl , sColor1 , sColor2 , bRepeatY){
			if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
			if(!dEl) return false;
			dEl.style.zoom = 1;
			var sF = dEl.currentStyle.filter;
			dEl.style.filter += ' ' + ['progid:DXImageTransform.Microsoft.gradient(	GradientType=',  +(!!bRepeatY),',enabled=true,startColorstr=',sColor1,', endColorstr=',sColor2,')'].join('');
		};
	}else{
		p_dCanvas = p_useCanvas = p_dCtx =  null;
		return function(dEl , sColor1 , sColor2  ){
			if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
			if(!dEl) return false;
			with(dEl.style){ backgroundColor = sColor2; };
			//alert('your browser does not support gradient effet');
		}
	}
})();
</script>
//调用方式:
<script>
setGradient('example1','#4ddbbe','#d449cc',1);
setGradient(document.body, '#629be2','#333ebe',0);
</script>

发表于 @ 2008年07月30日 14:28:00|评论(loading...)|收藏

新一篇: show一下刚做的系统登录界面 | 旧一篇: 《初雪之恋》唯美镜头

用户操作
[即时聊天] [发私信] [加为好友]
狂歌痛饮
订阅我的博客
XML聚合  FeedSky
狂歌痛饮的公告
 查看更多内容,请点击文章分类


Locations of visitors to this page
文章分类
收藏
    笑话
    07年网络搞笑流行语
    1男1女网吧经典对白
    GDP的故事[笑话]
    一个人的学历太重要了!
    上海某公司着装规定
    世上最经典的爱情诗句
    你爱不爱我?(爆笑)
    关于徐志摩是土匪的研究报告
    厉害的售货员
    唐僧:回首前瞻皆是泪
    地球人都知道呀
    川人逆境中的幽默
    幽默情书
    当今中国流行十大恶习排行榜
    忙碌的原因
    搞笑一下
    文采很好的辞职报告
    曾经世界排名第一的笑话
    爆笑:学生假条和老师批示
    真正100分的情书
    科大实录[笑话]
    网吧来的尸体验尸报告
    老婆和老妈同时掉在了水里的有答案了
    西游记十大杰出青年
    难以从命
    友情连接
    alittlefish
    Dicky's Blog
    emu ajajx
    linzhengqun的专栏(RSS)
    zjcxc(邹建)的专栏
    嘟嘟老窝
    小宇飞刀的BLOG
    张硕(CathyEagle)的专栏(RSS)
    最爱白菜(RSS)
    极具创意的Flash网站--Marina Penno
    梧桐深院(RSS)
    王宏健的专栏
    蝈蝈俊.net
    存档
    Csdn Blog version 3.1a
    Copyright © 狂歌痛饮