程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Web Chart入門(5) 2

Web Chart入門(5) 2

編輯:關於JAVA

實戰draw2d 之Label 放大,縮小的問題(raphael的text類似問題)

問題描述

在draw2d中使用Canvas 的setZoom function來擴大,縮小畫布進而放大,縮小畫布上的圖形大小。(Zoom in/Zoom Out功能)。

圖形類型Circle, Rectangle的放大,縮小都還正常,

但是 在Chrome浏覽器下Label 的縮小功能卻存在著label 的文本縮小時反而會變大的狀況。

具體的測試方式如下:

1. 沒有給label 特別設定font size。 看上去字體默認大小是10px.

2. Zoom out(縮小)畫布時, 文本的字體看上去反而變大了,其他圖形都是正常的。

( 放大:canvas.setZoom(0.95, false);

縮小:canvas.setZoom(1.05, false);)

3. 試試其他浏覽器, 在 Firefox是正常的。

解決思維與歷程

使用Chrome自帶的調試工具(按 F12 鍵), 看到Label最終產生的是以下的標簽:

<a style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);" xlink:title="8g High-sensitivity R-Touch support" id="ui-id-5">  
<text style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: start; font-style: normal;   
 font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-family: Arial;  
  " x="0" y="7" text-anchor="start" font="10px "Arial"" stroke="none" fill="#ffffff" title="8g High-sensitivity R-Touch support"
  transform="matrix(1,0,0,1,5007,4846.5)" stroke-width="1">  
  <tspan style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);" dy="3.5">Label Text</tspan>  
</text>  
</a>

產生的就是a 標簽下包含一個text 標簽, text 標簽下包含一個tspan標簽。

試圖修改text 的font 相關設置看看是否有效, 發現不行。貌似控制字體大小的是matrix(1,0,0,1,5007,4846.5) 這樣一句,而不是font 的設置。

以上思路失效。

==》既然draw2d使用的是raphael ,那麼raphael 本身是否有問題呢?

raphael的Text 對應到的就是draw2d 的 label, 建一個例子測試一下:

<!-- Create By oscar999 -->
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
<script src="raphael.js" type="text/javascript" charset="utf-8"></script>  
</head>  
<body>  
<input type="button" value="Change Viewbox Big" onclick="setTestViewBox('big')">  
<input type="button" value="Change Viewbox Small" onclick="setTestViewBox('small')">  
<script>  
var paper = Raphael(10,50,620,400);  
var circle = paper.circle(50,40,10);  
var t = paper.text(100, 100, "Rapha?l kicks butt!");  
circle.attr("fill","#f00");  
      
var i=2;  
      
var sOldTyle="";  
function setTestViewBox(stype)   
{  
    if(sOldTyle!=stype)  
    {  
        sOldTyle = stype;  
        i=1;  
    }  
    if(stype=="big")  
    {  
        paper.setViewBox(0, 0, 620/i, 400/i);  
    }else{  
        paper.setViewBox(0, 0, 620*i, 400*i);  
    }  
          
    i++;  
}  
</script>  
</body>  
</html>

查看Text 最終產生的標簽:

<text style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); text-anchor: middle; font-style:   
normal; font-variant: normal; font-weight: normal; font-size: 10px;   
line-height: normal; font-family: Arial;" x="100" y="100" text-anchor="middle"
font="10px "Arial"" stroke="none" fill="#000000" stroke-width="1">  
<tspan style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);" dy="3.5">Rapha?l kicks butt!</tspan>  
</text>

和draw2d是類似的。

問題也是一樣的,看來raphael 本身就有這個問題了。

zoom out 的時候,字體好像會保持在12px的大小。

==》Firefox 正常,看來要從浏覽器入手了。

到google 搜索一下 Chrome 12px.

果然有發現問題, Chrome 本身有對最小字體的設置。

解決方案在Chrome

點"設置" --> 顯示高級設置

找到 “網絡內容” --》 點"自定義字體" --》 字體大小下限

果然有 12: Lorem ipsum dolor sit amet, consectetur adipiscing elit.

此問題結論為: 不是程式bug, 浏覽器設置問題。 如果要解決的話,可以設置字體小一些。

除了設置浏覽器外,是否可以使用CSS的方式解決這個問題: 參見

Chrome 最小字體12px。

結果是失敗了。實際上,在未安裝鏈接文章方式設置CSS之前,查看最終產生的CSS, 已經有包含這個設置了。

<center class="header monospace" style="box-sizing: border-box; font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; white-space: nowrap; -webkit-background-origin: padding; -webkit-background-clip: padding; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><center class="title styles-selector" style="box-sizing: border-box; cursor: text; word-wrap: break-word; white-space: normal;"><center style="box-sizing: border-box;"><span class="selector" style="color:#777777;box-sizing: border-box;">text,<span> </span><span class="selector-matches" style="color:black;box-sizing: border-box;">tspan</span>,<span> </span>tref</span><span style="box-sizing: border-box;"><span> </span>{</span></center></center></center><ol class="properties properties-tree monospace" style="box-sizing: border-box; margin: 0px; padding: 2px 4px 0px 0px; list-style: none; min-height: 18px; font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; display: block; clear: both; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: nowrap; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><li title="" style="box-sizing: border-box; margin-left: 0px !important; white-space: normal; text-overflow: ellipsis; overflow: hidden; -webkit-user-select: text; cursor: auto; padding-left: 38px;"><input class="enabled-button" style="box-sizing: border-box; visibility: hidden; float: left; font-size: 10px; margin: 0px; vertical-align: top; position: relative; z-index: 1; width: 18px; left: -40px;" type="checkbox"><span title="-webkit-text-size-adjust: none;" style="color:#c800;box-sizing: border-box; margin-left: -38px;">-webkit-text-size-adjust</span>:<span> </span><span class="expand-element" style="box-sizing: border-box;"></span><span class="value" style="box-sizing: border-box;">none</span>;</li></ol><center style="box-sizing: border-box; color: rgb(0, 0, 0); font-family: Consolas, 'Lucida Console', monospace; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: nowrap; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">}</center>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved