我正在使用HighStocks的股票图表和gridster。 gridster中的每个块都可以自由拖动。但是,股票时间滑块小工具也可以拖动和调整大小。由于它位于gridster小部件的顶部,每当我拖动滑块时,整个小部件也会移动。我包括一个JSFiddle来证明我的观点。 http://jsfiddle.net/faPrd/
在这个小提琴中并不那么明显,因为没有那么多元素,但你已经可以看到,当你拖动滑块时,整个小工具会有所改变。我该如何防止这种情况?
我的HTML:
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<script src="http://code.highcharts.com/stock/modules/exporting.js"></script>
<div class="gridster ready">
<ul id = "gridlist" style="height: 550px; width: 550px; position: relative">
<li id = "gridlist1" class="gs-w" data-row="1" data-col="1" data-sizex="3" data-sizey="3">
<div id="container" style="height: 400px; min-width: 310px"></div>
</li>
<li id = "gridlist2" class="gs-w" data-row="1" data-col="4" data-sizex="3" data-sizey="3">
</li>
</ul>
</div>
我的Javascript for gridster:
var gridster;
$(function(){
gridster = $(".gridster ul").gridster({
widget_base_dimensions: [150, 150],
widget_margins: [5, 5],
serialize_params: function($w, wgd) {
return {
x: wgd.col,
y: wgd.row,
width: wgd.size_x,
height: wgd.size_y,
id: $($w).attr('id')
};
},
draggable: {
stop: function(event, ui) {
var positions = "[";
for (var i = 0; i < this.serialize().length; i++) {
positions += JSON.stringify(this.serialize()[i]);
if (i !== this.serialize().length - 1) {
positions += ",";
}
}
positions += "]";
localStorage.setItem('positions', positions);
}
},
helper: 'clone',
resize: {
enabled: true,
stop: function(e, ui, $widget) {
var positions = "[";
for (var i = 0; i < this.serialize().length; i++) {
positions += JSON.stringify(this.serialize()[i]);
if (i !== this.serialize().length - 1) {
positions += ",";
}
}
positions += "]";
localStorage.setItem('positions', positions);
}
}
}).data('gridster');
});
答案 0 :(得分:1)
一个通用的jQuery解决方案可能是检测图表容器上的mousedown
以禁用gridster-dragging,并检测mouseup
一般来启用gridster-dragging。
例如,使用以下代码(JSFiddle example):
$('#container').mousedown(function() {
gridster.disable();
});
$(document).mouseup(function(){
gridster.enable();
});
这将要求你有一些区域不是图表容器的一部分,但是在网格中(否则你将无处抓住gridster-grid)。或者你可以更具体地说明点击时应禁用gridster-dragging的元素。
了解.highcharts-navigator
作为选择器的效果如何(并且该区域中没有任何数量的选择器),我发现这可能是仅禁用gridster的一种更简单的方法导航器(JSFiddle example):
$('#container').mousedown(function(event) {
var chart = $('#container').highcharts();
var navTop = $('.highcharts-navigator').offset().top;
var navHeight = chart.options.navigator.height + chart.options.scrollbar.height;
if(event.pageY > navTop &&
event.pageY < navTop + navHeight) {
gridster.disable();
}
});
$(document).mouseup(function(){
gridster.enable();
});