最近項目需要使用手機圖表,但是找了很久都沒找到專門為移動端開發的圖表,隻能找一些能相容移動端的圖表控件,今天就講講關于ichartjs這個圖形庫的一點問題。
問題
ichartjs的提示框tip的顯示沒有為移動端做調整,在移動端顯示效果很差
原因
直接通過ichartjs的源碼看原因,檢視$.tip這個提示框元件中的doaction:


可以看到,隻使用了mouseover和mouseout事件,沒有為移動端做調整。
這也當然在移動端點選時候是顯示不了提示框,隻能在圖表上拖動後才能顯示提示框(太蛋疼了)。
尋找解決方法
其實圖表也是這樣的嗎?
重新換了一個圖表庫——highcharts(很美觀),測試在移動端的顯示效果(結果令人振奮的),它有為移動端做相容。
我又找到了highcharts關于提示框顯示的代碼段:


可以看到highcharts和ichartjs在提示框事件方面的代碼非常相似,但是highcharts在最後添加上了一個touchstart事件,這樣移動端點選圖表就能顯示提示框。
提起highcharts并不是為了大家不用ichartjs,隻是為了更加明确問題的原因,以便解決問題,這兩個圖形庫各有好處的(具體就在結尾總結說吧)。
第一個解決方法:
依照highcharts為ichartjs添加上touchstart事件:
很遺憾的是,這個理想中的方法,并沒有起效,我探尋了很多種原因,都還沒找到原因(如果有誰知道請麻煩告訴我)。
我列印過 _.t 這個對象出來看過,内容如下:
可以看到其實是有touchstart事件的,就是不知道為什麼失效,但可以明确是,那些array[1或2]的事件是肯定有效的。
第二個解決方法:
這個方法算是普遍的做法,直接操作dom,上代碼:


在代碼裡我盡量使用原生的js,避免被其他代碼影響。同樣改動的地方也少。
缺點:點選餅圖外邊不能将提示框去除,總有一個存在(某種程度上不是那麼影響體驗)。
這兩個方法,在沒解決touchstart失效問題之前,還是使用第二個吧。
總結
ichartjs還需要在相容移動端這方面下些功夫。
下面講兩點題外話:
一、mobile web
移動端上的事件并不與pc上的事件相同,是以在使用事件時也别慣用了pc上的事件,思考這些事件在移動端的可能的效果,尋找更适合移動端的事件,并實踐和進行細節調整。
例如在使用click和touch事件,touch的響應速度是快過click的,是以可以考慮使用touch替換click
二、highcharts和ichartjs的特點比較
ichartjs
1.代碼開源免費
2.不依賴第三方庫
3.圖表效果還算美觀,能夠滿足移動端圖表的要求
4.有3d圖表
5.可以拆分使用某種圖表的源碼,不必引入整個ichartjs源碼
6.隻能顯示在支援canvas的浏覽器
highcharts
1.要收費的
2.依賴jquery庫
3.圖表效果非常美觀,顯示效果也非常好
4.相容性非常好
轉載:http://www.cnblogs.com/lovesong/p/3389886.html