关于iChartjs在移动端提示框tip显示不正常的解决方法

最近项目需要使用手机图表,但是找了很久都没找到专门为移动端开发的图表,只能找一些能兼容移动端的图表控件,今天就讲讲关于iChartjs这个图形库的一点问题。

问题

iChartjs的提示框tip的显示没有为移动端做调整,在移动端显示效果很差

原因

直接通过iChartjs的源码看原因,查看$.Tip这个提示框组件中的doAction:

doAction:function(_){
    _.T.on('mouseover',function(c,e,m){
        _.show(e,m);  //显示提示框
    }).on('mouseout',function(c,e,m){
        _.hidden(e);  //隐藏提示框
    });

    if(_.get('showType')=='follow'){
        _.T.on('mousemove',function(c,e,m){
            if(_.T.variable.event.mouseover){
                setTimeout(function(){
                    if(_.T.variable.event.mouseover)
                        _.follow(e,m,_);
                },_.get('delay'));
            }
        });
    }
},

可以看到,只使用了mouseovermouseout事件,没有为移动端做调整。

这也当然在移动端点击时候是显示不了提示框,只能在图表上拖动后才能显示提示框(太蛋疼了)。

寻找解决方法

其实图表也是这样的吗?

重新换了一个图表库——highcharts(很美观),测试在移动端的显示效果(结果令人振奋的),它有为移动端做兼容。

我又找到了highcharts关于提示框显示的代码段:

if (!series._hasTracking) {
    each(series.trackerGroups, function (key) {
        if (series[key]) { // we don't always have dataLabelsGroup
            series[key]
                .addClass(PREFIX + 'tracker')
                .on('mouseover', onMouseOver)
                .on('mouseout', function (e) {  pointer.onTrackerMouseOut(e); })
                .css(css);
            if (hasTouch) {
                series[key].on('touchstart', onMouseOver);
                alert(1);
            }
        }
    });
    series._hasTracking = true;
}

可以看到highcharts和iChartjs在提示框事件方面的代码非常相似,但是highcharts在最后添加上了一个touchstart事件,这样移动端点击图表就能显示提示框。

提起highcharts并不是为了大家不用iChartjs,只是为了更加明确问题的原因,以便解决问题,这两个图形库各有好处的(具体就在结尾总结说吧)。

第一个解决方法:

依照highcharts为iChartjs添加上touchstart事件:

if($.touch){
   _.T.on('touchstart',function(c,e,m){
    _.show(e,m);
   })
}

很遗憾的是,这个理想中的方法,并没有起效,我探寻了很多种原因,都还没找到原因(如果有谁知道请麻烦告诉我)。

我打印过 _.T 这个对象出来看过,内容如下:

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

第二个解决方法:

这个方法算是普遍的做法,直接操作DOM,上代码:

_.T.on('click',function(c,e,m){

    var shell=document.getElementById("shell-"+e.target.id);
    var allTip =shell.getElementsByTagName('div'),i=0;
    for(;i<allTip.length;i++){
        allTip[i].style.visibility="hidden";
    }
    _.show(e,m);

});

在代码里我尽量使用原生的js,避免被其他代码影响。同样改动的地方也少。
缺点:点击饼图外边不能将提示框去除,总有一个存在(某种程度上不是那么影响体验)。

这两个方法,在没解决touchstart失效问题之前,还是使用第二个吧。

总结

iChartjs还需要在兼容移动端这方面下些功夫。

下面讲两点题外话:

一、mobile web

移动端上的事件并不与PC上的事件相同,所以在使用事件时也别惯用了PC上的事件,思考这些事件在移动端的可能的效果,寻找更适合移动端的事件,并实践和进行细节调整。

例如在使用clicktouch事件,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

时间: 2024-11-17 01:04:23

关于iChartjs在移动端提示框tip显示不正常的解决方法的相关文章

浏览器执行history.go(-1) FCKeditor编辑框内显示html源代码的解决方法_网页编辑器

解决方法:FCK.LinkedField.value=FCKTools.HTMLEncode(FCK.LinkedField.value);改为 FCK.LinkedField.value=FCKTools.HTMLDecode(FCK.LinkedField.value); 如果问题不能解决,请注意是否清空浏览器缓存.

win7系统浏览器出现错误提示“网站无法显示该网页”如何解决

  windows操作系统自带IE浏览器,win7系统使用浏览器浏览网页的时候出现网页错误,弹出错误提示"网站无法显示该网页"导致网页无法正常浏览,该如何解决呢?现在小编和大家说一下win7系统浏览器出现错误提示"网站无法显示该网页"的解决方法. 步骤如下: 一.IE浏览器设置 1.打开浏览器,点击"工具"(或浏览器右侧齿轮图标),然后单击"Internet选项"进入设置窗口; 2.在弹出的的窗体中选择"高级&quo

如何让MessageBox.Show()提示框不显示默认的确定按钮

问题描述 提示框中显示提示的内容,可设置图标样式,点击右上角的叉叉可关闭提示框,不要下面的任何按钮.如下图:求大神指教 解决方案 解决方案二:这样做有任何意义?你问人家确定要退出吗,结果不给任何选项?不是应该显示2个按钮,或者3个按钮,才对嘛非要做成这样,自己做个弹出窗体吧解决方案三:自己做个窗体,去掉最大化,最小化按钮.里边使用Label放置内容.个人觉的一个按钮比右上角的关闭按钮要来的直接些.解决方案四:站在使用者的角度去考虑问题,不要太标新立异,尤其是这种给别人带来不方便的想法解决方案五:

如何在Gridview中用JavaScript用提示框来显示鼠标经过的行号

问题描述 如何在Gridview中用JavaScript用提示框来显示鼠标经过的行号??? 解决方案 解决方案二:不是吧,没有人回复啊,好像这个问题不是太难的啊.解决方案三:学习学习JavaScript用的不太好!!!解决方案四:在gridview的rowdatabound事件写if(e.Row.RowType==DataControlRowType.DataRow){e.row.attributes.add("onmouseover","showdiv('"+e.

JS使用cookie实现DIV提示框只显示一次的方法_javascript技巧

本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法.分享给大家供大家参考,具体如下: 这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起来,很好的提升了用户体验,不会使用户烦感:利用Cookies,我们还可做超多的事情,慢慢体会吧. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-cookie-div-dlg-show-once-cod

win7打开exe文件提示“无法打开exe可执行文件”两种解决方法

  win7打开exe文件提示"无法打开exe可执行文件"两种解决方法          1.打开"计算机"或任意文件夹,点击"组织"-"文件夹和搜索选项"; 2.在"文件夹选项"框中点击"查看"选卡,然后在下面"高级设置"下框中将"隐藏已知文件类型的扩展名"前面的 勾去掉,点击应用并确定; 3.在桌面空白处鼠标右击选择"新建-文本文档&

Win7系统提示“无法定位动态链接库user32.dll”的解决方法

user32.dll是Windows用户界面相关应用程序接口,用于Windows处理,基本用户界面等特性,比如创建窗口和发送消息等,有用户反馈在win7系统上运行某软件的过程中,出现提示无法定位程序输入点dwmhintdxupdate于动态链接库user32.dll上,导致这个软件无法使用,下载重装也没用,不知该如何解决了?针对此问题,下面小编整理了解决方法,给大家介绍Win7纯净版64位系统运行软件提示无法定位动态链接库user32.dll的解决方法. 操作方法: 1.首先重新启动或注销win

Win8系统安装过程中提示Error Code:0x0000005D错误的解决方法

  win8系统虽然在慢慢退出市场,不过还是有不少的用户喜欢Win8系统的风格,而在Win7升级win8系统的过程中会出现一些问题,有位用户遇到错误提示Error Code:0x0000005D的问题,该如何解决此问题呢?下面小编研究整理安装Win8系统提示Error Code:0x0000005D错误的解决方法. 错误信息如下: Your PC needs to restart. Please hold down the power button Error Code:0x0000005D P

Win7安装程序提示“安装程序已经在运行”的解决方法

  Win7安装程序提示"安装程序已经在运行"的解决方法 1.在任务栏单击右键,选择"启动任务管理器"; 2.在任务管理器中点击"用户"选项卡,在下面找到当前运行的用户并单击右键,选择"注销"; 3.注销后重新登入操作系统,然后在安装程序上单击右键,选择"重命名",随便添加一些数字或者字母(程序名字后面的.exe千万不要改); 4.修改完成后重新安装即可解决.