天天看點

關于iChartjs在移動端提示框tip顯示不正常的解決方法

最近項目需要使用手機圖表,但是找了很久都沒找到專門為移動端開發的圖表,隻能找一些能相容移動端的圖表控件,今天就講講關于ichartjs這個圖形庫的一點問題。

問題

ichartjs的提示框tip的顯示沒有為移動端做調整,在移動端顯示效果很差

原因

直接通過ichartjs的源碼看原因,檢視$.tip這個提示框元件中的doaction:

關于iChartjs在移動端提示框tip顯示不正常的解決方法
關于iChartjs在移動端提示框tip顯示不正常的解決方法

可以看到,隻使用了mouseover和mouseout事件,沒有為移動端做調整。

這也當然在移動端點選時候是顯示不了提示框,隻能在圖表上拖動後才能顯示提示框(太蛋疼了)。

尋找解決方法

其實圖表也是這樣的嗎?

重新換了一個圖表庫——highcharts(很美觀),測試在移動端的顯示效果(結果令人振奮的),它有為移動端做相容。

我又找到了highcharts關于提示框顯示的代碼段:

關于iChartjs在移動端提示框tip顯示不正常的解決方法
關于iChartjs在移動端提示框tip顯示不正常的解決方法

可以看到highcharts和ichartjs在提示框事件方面的代碼非常相似,但是highcharts在最後添加上了一個touchstart事件,這樣移動端點選圖表就能顯示提示框。

提起highcharts并不是為了大家不用ichartjs,隻是為了更加明确問題的原因,以便解決問題,這兩個圖形庫各有好處的(具體就在結尾總結說吧)。

第一個解決方法:

依照highcharts為ichartjs添加上touchstart事件:

很遺憾的是,這個理想中的方法,并沒有起效,我探尋了很多種原因,都還沒找到原因(如果有誰知道請麻煩告訴我)。

我列印過 _.t 這個對象出來看過,内容如下:

關于iChartjs在移動端提示框tip顯示不正常的解決方法

可以看到其實是有touchstart事件的,就是不知道為什麼失效,但可以明确是,那些array[1或2]的事件是肯定有效的。

第二個解決方法:

這個方法算是普遍的做法,直接操作dom,上代碼:

關于iChartjs在移動端提示框tip顯示不正常的解決方法
關于iChartjs在移動端提示框tip顯示不正常的解決方法

在代碼裡我盡量使用原生的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

繼續閱讀