隨筆-57  評論-129  文章-0  trackbacks-0
          最近在搞JSI 的重構(gòu),少來冒泡了。
          發(fā)一個中午的剛用到的小技巧:

          在關機效果實現(xiàn)上,現(xiàn)在一般根據(jù)瀏覽器特征分別使用 慮鏡/樣式/圖片 去模擬。

          其中Opera是不支持網(wǎng)頁透明的,只能用png的alpha透明模擬。
          所以,我們需要一張?zhí)貏e的小圖片。一個象素,alpha透明。

          但是這個單象素圖片的出現(xiàn),感覺有點怪怪的,而且當網(wǎng)速很慢的時候,裝載這個小圖片還會延遲,效果不好。

          不過,Opera的另外一個特性,可以避免這個問題:data:協(xié)議的支持。

          對于這種小圖片,完全可以編碼到樣式里面

          background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mM4ffp0AwAHqALiYeNxSgAAAABJRU5ErkJggg==)


          好了,如此一來,關機效果的實現(xiàn),就沒有圖片這個累贅了。


          圖片的生成:

          圖片的生成,浪費我一個中午的時間:(
          開始本想找個軟件做掉,最后沒發(fā)現(xiàn)一個如意的,干脆,自己看看api,自己寫了一下:
          代碼如下:
              public static void main(String[] args) throws IOException {
                  BufferedImage image 
          = new BufferedImage(11,
                          BufferedImage.TYPE_INT_ARGB);
                  Graphics2D g2d 
          = image.createGraphics();
                  
          // RGBA #cccccc80
                  g2d.setColor(new Color(0xcc0xcc0xcc0x80));
                  g2d.fillRect(
          0011);
                  g2d.dispose();
                  IIOImage iioImage 
          = new IIOImage(image, nullnull);
                  ImageTypeSpecifier type 
          = ImageTypeSpecifier
                          .createFromRenderedImage(image);
                  ImageWriter writer 
          = (ImageWriter) ImageIO.getImageWriters(type, "png")
                          .next();
                  ByteArrayOutputStream out 
          = new ByteArrayOutputStream();
                  writer.setOutput(ImageIO.createImageOutputStream(out));
                  writer.write(
          null, iioImage, null);
                  BASE64Encoder encoder 
          = new BASE64Encoder();
                  String result 
          = encoder.encode(out.toByteArray()).replaceAll("[\r\n]",
                          
          "");
                  System.out.println(
          "data:image/png;base64," + result);
              }


          需要其他顏色,自己修改一下代碼即是。
          posted on 2007-05-18 15:30 金大為 閱讀(1308) 評論(1)  編輯  收藏

          評論:
          # re: 關于網(wǎng)頁上半透明遮罩的優(yōu)化(關機效果) 2007-06-22 14:43 | 金大為
          經(jīng)測試得:
          除ie外,瀏覽器基本都支持png Alpha透明及data協(xié)議,所以,這種遮罩代碼可以簡化為:
          if(BrowserInfo.isIE()){
          masker.style.background = "#CCCCCC";
          masker.style.filter = "Alpha(opacity=50)";
          //}else if(BrowserInfo.isGecko()){
          // masker.style.background = "#CCCCCC";
          // masker.style.MozOpacity = 0.5;
          //}else if(BrowserInfo.isKhtml()){//support png alpha?? need test..yes support
          // masker.style.background = "#CCCCCC";
          // masker.style.KhtmlOpacity = 0.5;
          //}else if(BrowserInfo.isOpera(9)){
          // masker.style.opacity = 0.5;
          }else{
          //masker.style.background = "#CCCCCC";
          masker.style.backgroundImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mM4ffp0AwAHqALiYeNxSgAAAABJRU5ErkJggg==)";
          }  回復  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 朝阳市| 贞丰县| 小金县| 满洲里市| 历史| 渝中区| 当涂县| 聂拉木县| 郑州市| 神木县| 黔西| 无极县| 定南县| 蒙城县| 黄石市| 津市市| 红安县| 宁津县| 罗定市| 泉州市| 赣榆县| 高碑店市| 深水埗区| 扶余县| 昭苏县| 凤冈县| 邵武市| 隆化县| 屏东县| 江北区| 顺平县| 灵宝市| 天台县| 蓬安县| 景东| 安义县| 桂东县| 秦安县| 射阳县| 安陆市| 胶州市|