### 情況描述
這里使用的是Rectangle , 里面加入一個Label 或多個Label 的組合圖形。
在Chrome里拖拽圖形的時候,偶爾會把所有Rectangle包含的Label 全部以深藍色底色。
需要在非Canvas的區域點擊一下,深底色才消除。
以上的狀況出現在IE和Chrome都會有,但幾率倒不是很大。在Firefox 中沒有這個問題。
### 問題考慮與重現
既然不是所有流量器都有這個問題,應該和瀏覽器有一定的關系。
google 一下 “Chrome 頁面全選中”, 果然找到一些線索。
Chrome 和其他流量器本身提供了文本部分和全部選中的功能,選擇之后的效果就是反底色。
在非Canvas區域盡量多選一些文本,果然Canvas區的圖馬上就有那種效果了,問題很容易重現了。
看來這個問題不光是chart 會遇到。
既然是選中導致,那是否設置不可選中的CSS是否就可以了呢? 先看看如何設置不可選取的樣式
在 Chrome 中:
~~~
body
{
-webkit-user-select: none;
}
~~~
在Firefox 中:
~~~
body
{
-moz-user-select: none;
}
~~~
在IE中(不能通過設置 CSS達成,用以下方式)
~~~
<body onselectstart="return false">
~~~
### 問題解決
以上的設置是對整個頁面進行設置, 這并不是我的要求。
對Chrome 和 FireFox ,可以對指定的頁面元素使用以上CSS樣式。
回歸到draw2d, 如何給Label 設置這個CSS,
1. 初步想法是看看能否找到直接設置CSS的方式, as shape.style.XXX= XXX, 沒有找到。
看來只能底層一點的Raphael方式設置頁面元素的CSS了。
2. 設置點:
最初考慮的設置點是init or repaint但是發現都失敗了。
正確是設置在? Label定義的createSet的方法里。
修改如下:
~~~
createSet: function () {
var newShape = this.canvas.paper.text(0, 0, this.text, this.getTitle(), this.getWeight());
//not select text
if(isChrome)
{
($(newShape.node)).css('-webkit-user-select', 'none');
}
return newShape;
}
~~~
- 前言
- [Web Chart系列之一]Web端圖形繪制SVG,VML, HTML5 Canvas 技術比較
- [Web Chart系列之二] 各種實現js 圖表的library匯總與比較
- [Web Chart系列之三] 圖形布局-Layout
- [Web Chart系列之四] 圖形布局-Layout 之js設計實現
- [Web Chart系列之一(續)]Web端圖形繪制SVG,VML, HTML5 Canvas 簡單實例
- [Web Chart系列之五] 1. 實戰draw2d 之總體介紹
- [Web Chart系列之五] 2. 實戰draw2d 之Label 放大,縮小的問題(raphael的text類似問題)
- [Web Chart系列之五] 3. 實戰draw2d 之圖形填充色(純色 or 漸變)
- [Web Chart系列之五] 4. 實戰draw2d(Raphael)之取消Chrome中Label Text 全部選中
- [Web Chart系列之六] canvas Chart 導出圖文件
- [Web Chart系列之七] 物理動畫效果(如撕扯效果)
- [Web Chart系列之五] 5. 實戰draw2d之figure tooltip 實現
- Web圖形開發方案選型,SVG/VML/Flash/Applet優劣比較
- [Web Chart系列之五] 6. 實戰draw2d之ConnectionRouter