zoukankan      html  css  js  c++  java
  • 用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>
  • 相关阅读:
    Activity 横竖屏生命周期
    gradle wrapper, gradle ,gradle plugin 之间的关系
    《构建之法》第八、九章学习总结
    《构建之法》第六、七章学习总结
    《构建之法》第三、四、五章学习总结
    《构建之法》第一、二章学习总结
    SQL练习50题(基于MySQL)后25题
    SQL练习50题(基于MySQL)前25题
    轮播2-css
    轮播1-animate-匀速
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400721.html
Copyright © 2011-2022 走看看