首页 >> 文档 >> JavaScript专题

JS渐变特效,兼容IE,FF等浏览器

发布日期:2008-08-01最近更新:2008-08-01来源:BHCODE作者:

JS渐变特效,兼容IE,FF等浏览器

<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>

本周推荐
MORE
热点关注
MORE