dataZoom在移动端使用时,当图表的容器不在页面最顶端,上面有其他容器或内容时,双指缩放就会有问题。
具体表现是缩放有效范围(高度)是从页面顶部开始的,而不是容器顶部。从而导致无法在图表上用手指缩放。
1.
2.
option = {
tooltip : {
trigger: 'item'
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType: {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : true,
legend: {
data:['Budget 2011', 'Budget 2012'],
itemGap: 5
},
grid: {
top: '12%',
left: '1%',
right: '10%',
containLabel: true
},
xAxis: [
{
type : 'category',
data : [1,2,3,4,5,6,7,8,9,10,11]
}
],
yAxis: [
{
type : 'value',
name : 'Budget (million USD)',
axisLabel: {
formatter: function (a) {
return
}
}
}
],
dataZoom: [
{
show: true,
start:0,
end: 100,
handleSize: 8
},
{
type: 'inside',
start: 0,
end: 100
},
],
series : [
{
name: 'Budget 2011',
type: 'bar',
data: [34,65,11,44,55,32,76,91,3,21,98]
},
{
name: 'Budget 2012',
type: 'bar',
data: [24,35,51,94,35,9,23,56,11,45,64]
}
]
}
http://www.propowerlink.com:1166/data/index.html
反复测试,这个的确是BUG,所有移动端都有。等不及echarts版本更新,自己找到原因并解决了。
原因:PC端缩放时,dataZoom是根据dom的offsetX,offsetY计算鼠标是否落在数据区。offsetX,offsetY都是相对父亲dom的,计算方法没问题,所以PC端缩放正常。
而移动端缩放时,dataZoom是根据触摸屏的pinchX,pinchY的值来计算手指是否落在数据区。pinchX,pinchY值是相对页面的,不是相对父dom。所以计算结果有问题。正确的做法是参与计算的pinchX,pinchY要减去echart dom的相对页面的top和left。
解决:
我自己修改了echarts.js,添加了dom相对页面top和left差值的两个变量,并在函数function pinch(e) {....}里让pinchX,pinchY要减去这两个变量。 移动端缩放就正常了。
Most helpful comment
反复测试,这个的确是BUG,所有移动端都有。等不及echarts版本更新,自己找到原因并解决了。
原因:PC端缩放时,dataZoom是根据dom的offsetX,offsetY计算鼠标是否落在数据区。offsetX,offsetY都是相对父亲dom的,计算方法没问题,所以PC端缩放正常。
而移动端缩放时,dataZoom是根据触摸屏的pinchX,pinchY的值来计算手指是否落在数据区。pinchX,pinchY值是相对页面的,不是相对父dom。所以计算结果有问题。正确的做法是参与计算的pinchX,pinchY要减去echart dom的相对页面的top和left。
解决:
我自己修改了echarts.js,添加了dom相对页面top和left差值的两个变量,并在函数function pinch(e) {....}里让pinchX,pinchY要减去这两个变量。 移动端缩放就正常了。