用JS实现渐变效果,兼容各款浏览器
2009-02-11 13:49
846 查看
以住做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>
<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>
相关文章推荐
- 用JS实现渐变效果,兼容各款浏览器
- 浏览器实现颜色渐变效果(兼容)
- js行号显示的文本框实现效果(兼容多种浏览器 )
- 纯JS(JavaScript)实现拖拽效果,兼容各大浏览器
- 不用JS实现显示隐藏效果(兼容各浏览器)
- css中background:-webkit-gradient实现背景渐变效果,并且兼容各个浏览器
- 用js实现的图片在浏览器里面来回滚动效果 <兼容ie和ff>
- js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
- js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
- CSS实现兼容性的渐变背景(gradient)效果兼容众多浏览器
- js行号显示的文本框实现效果(兼容多种浏览器 )
- JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
- js与jQuery实现的兼容多浏览器Ajax请求实例
- js阻止浏览器的默认行为以及停止事件冒泡(用JQuery实现回车提交,兼容IE、FF浏览器) 转
- JS实现画线(兼容所有浏览器)
- html5 js 实现浏览器全屏效果(F11)
- JS网页播放声音实现代码兼容各种浏览器
- 纯JS实现五子棋游戏兼容各浏览器(附源码)
- 用js实现透明度渐变效果
- 解决Js解析xml浏览器不兼容问题及省市区三级联动实现