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

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

          其中Opera是不支持網頁透明的,只能用png的alpha透明模擬。
          所以,我們需要一張特別的小圖片。一個象素,alpha透明。

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

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

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

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


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


          圖片的生成:

          圖片的生成,浪費我一個中午的時間:(
          開始本想找個軟件做掉,最后沒發現一個如意的,干脆,自己看看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: 關于網頁上半透明遮罩的優化(關機效果) 2007-06-22 14:43 | 金大為
          經測試得:
          除ie外,瀏覽器基本都支持png Alpha透明及data協議,所以,這種遮罩代碼可以簡化為:
          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==)";
          }  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 长汀县| 霍州市| 青川县| 温泉县| 凤城市| 拜城县| 犍为县| 融水| 黑山县| 武山县| 连江县| 齐河县| 雷波县| 斗六市| 文山县| 浪卡子县| 东乌| 武安市| 定结县| 鲁甸县| 廉江市| 宜城市| 丹阳市| 阿合奇县| 桐庐县| 尼玛县| 汶上县| 怀安县| 株洲市| 公主岭市| 房山区| 永安市| 壤塘县| 图们市| 江津市| 渭南市| 岚皋县| 萨嘎县| 荔波县| 理塘县| 双流县|