Javascript 在具有不同宽度的可排序div中使用amchart
我有一个用bootstrap制作的页面,在这个页面中我有两个不同的部分,第一个使用“col-lg-12”,第二个使用“col-lg-6”,它们都是可拖动的。我想把一些amcharts放在里面,一切都很好,我的图表都很灵敏,但当我把一个大分区的div移到小分区时,图表灵敏功能停止工作,不会自动调整大小。 我的html代码Javascript 在具有不同宽度的可排序div中使用amchart,javascript,jquery,amcharts,amcharts4,Javascript,Jquery,Amcharts,Amcharts4,我有一个用bootstrap制作的页面,在这个页面中我有两个不同的部分,第一个使用“col-lg-12”,第二个使用“col-lg-6”,它们都是可拖动的。我想把一些amcharts放在里面,一切都很好,我的图表都很灵敏,但当我把一个大分区的div移到小分区时,图表灵敏功能停止工作,不会自动调整大小。 我的html代码 <script src="https://www.amcharts.com/lib/4/core.js"></script> <script src
<script src="https://www.amcharts.com/lib/4/core.js"></script>
<script src="https://www.amcharts.com/lib/4/charts.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/material.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
<div class="row" id="kt_sortable_portlets">
<div class="col-lg-12">
<!--begin::Portlet-->
<div class="kt-portlet kt-portlet--sortable">
<div class="kt-portlet__head">
<div class="kt-portlet__head-label">
<h3 class="kt-portlet__head-title">
Big div
</h3>
</div>
</div>
<div class="kt-portlet__body">
<div id="kt_chart1" style="min-height: 300px;">
</div>
</div>
</div>
<!--end::Portlet-->
<!-- begin:Empty Portlet: sortable porlet required for each columns! -->
<div style="border:5px dashed rgb(54, 161, 233);visibility: visible;text-align: center" class="kt-portlet kt-portlet--sortable-empty">
<h5 style="margin: auto auto">Drag here to Full screen</h5>
</div>
<!--end::Empty Portlet-->
</div>
<div class="col-lg-6">
<!--begin::Portlet-->
<div class="kt-portlet kt-portlet--sortable">
<div class="kt-portlet__head">
<div class="kt-portlet__head-label">
<h3 class="kt-portlet__head-title">
small div
</h3>
</div>
</div>
<div class="kt-portlet__body">
<div id="kt_flotcharts_heart" style="min-height: 300px;">
</div>
</div>
</div>
<!-- begin:Empty Portlet: sortable porlet required for each columns! -->
<div class="kt-portlet kt-portlet--sortable-empty"></div>
</div>
<!--end::Portlet-->
<script>
var KTAppOptions = {"colors":{"state":
{"brand":"#5d78ff","light":"#ffffff","dark":"#282a3c","primary":"#5867dd","success":"#34bfa3","info":"#36a3f7","warning":"#ffb822","danger":"#fd3995"},"base":{"label":["#c5cbe3","#a1a8c3","#3d4465","#3e4466"],"shape":["#f0f3ff","#d9dffa","#afb4d4","#646c9a"]}}};
</script>
大div
拖动此处可全屏显示
小div
var ktapoptions={“颜色”:{“状态”:
“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{“品牌:”{555D78FF”、“光:”:“光:”:“光::”{55D7878FF”、“光:”;“光:”;FFFFFFFFFFFF”、“暗:“:::“““;283A3A3A3A3C”、“暗:”;主要:”;第三个A3A3A3A3A3A3A3C”、“主要::”:““;主要::”;主要::”;;;“““;第5858585858677777表层::”;成功:”,,,,“成功:”:::::::“成功:”:::::::““““““““;;;;,”成功::”””””””””;;;;;;;;;;;;35; afb4d4“,”#646c9a”]}}};
我的js代码
// Themes begin
am4core.useTheme(am4themes_material);
am4core.useTheme(am4themes_animated);
// Themes end
var chart = am4core.create("kt_chart1", am4charts.XYChart);
var drawChart=function(){
var data = [];
var open = 100;
var close = 120;
var names = ["Raina",
"Demarcus",
"Carlo",
"Jacinda",
"Richie",
"Antony",
"Amada",
"Idalia",
"Janella",
"Marla",
"Curtis",
"Shellie",
"Meggan",
"Nathanael",
"Jannette",
"Tyrell",
"Sheena",
"Maranda",
"Briana",
"Rosa",
"Rosanne",
"Herman",
"Wayne",
"Shamika",
"Suk",
"Clair",
"Olivia",
"Hans",
"Glennie",
];
for (var i = 0; i < names.length; i++) {
open += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 5);
close = open + Math.round(Math.random() * 10) + 3;
data.push({ category: names[i], open: open, close: close });
}
chart.data = data;
var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());
categoryAxis.renderer.grid.template.location = 0;
categoryAxis.dataFields.category = "category";
categoryAxis.renderer.minGridDistance = 15;
categoryAxis.renderer.grid.template.location = 0.5;
categoryAxis.renderer.grid.template.strokeDasharray = "1,3";
categoryAxis.renderer.labels.template.rotation = -90;
categoryAxis.renderer.labels.template.horizontalCenter = "left";
categoryAxis.renderer.labels.template.location = 0.5;
categoryAxis.renderer.inside = true;
categoryAxis.renderer.labels.template.adapter.add("dx", (dx, target)=>{
return -target.maxRight / 2;
})
var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.tooltip.disabled = true;
valueAxis.renderer.ticks.template.disabled = true;
valueAxis.renderer.axisFills.template.disabled = true;
var series = chart.series.push(new am4charts.ColumnSeries());
series.dataFields.categoryX = "category";
series.dataFields.openValueY = "open";
series.dataFields.valueY = "close";
series.tooltipText = "open: {openValueY.value} close: {valueY.value}";
series.sequencedInterpolation = true;
series.fillOpacity = 0;
series.strokeOpacity = 1;
series.columns.template.width = 0.01;
series.tooltip.pointerOrientation = "horizontal";
var openBullet = series.bullets.create(am4charts.CircleBullet);
openBullet.locationY = 1;
var closeBullet = series.bullets.create(am4charts.CircleBullet);
closeBullet.fill = chart.colors.getIndex(4);
closeBullet.stroke = closeBullet.fill;
chart.cursor = new am4charts.XYCursor();
chart.scrollbarX = new am4core.Scrollbar();
chart.scrollbarY = new am4core.Scrollbar();
}
var KTPortletDraggable = function () {
return {
//main function to initiate the module
init: function () {
$("#kt_sortable_portlets").sortable({
connectWith: ".kt-portlet__head",
items: ".kt-portlet",
opacity: 0.8,
handle : '.kt-portlet__head',
coneHelperSize: true,
placeholder: 'kt-portlet--sortable-placeholder',
forcePlaceholderSize: true,
tolerance: "pointer",
helper: "clone",
tolerance: "pointer",
forcePlaceholderSize: !0,
helper: "clone",
cancel: ".kt-portlet--sortable-empty", // cancel dragging if portlet is in fullscreen mode
revert: 250, // animation in milliseconds
update: function(b, c) {
if (c.item.prev().hasClass("kt-portlet--sortable-empty")) {
c.item.prev().before(c.item);
}
}
});
}
};
}();
jQuery(document).ready(function() {
drawChart();
KTPortletDraggable.init();
});
//主题开始
am4core.useTheme(am4themes_材料);
am4core.useTheme(am4themes_动画);
//主题结束
var chart=am4core.create(“kt_chart1”,am4charts.XYChart);
var drawChart=函数(){
var数据=[];
var开放=100;
var close=120;
var name=[“Raina”,
“德马库斯”,
“卡洛”,
“杰辛达”,
“里奇”,
“安东尼”,
“阿玛达”,
“爱达丽亚”,
“珍妮拉”,
“玛拉”,
“柯蒂斯”,
“雪莉”,
“梅根”,
“纳撒尼尔”,
“詹妮特”,
“泰瑞尔”,
“希娜”,
“玛兰达”,
“布丽安娜”,
“罗莎”,
“罗桑”,
“赫尔曼”,
“韦恩”,
“沙米卡”,
“Suk”,
“克莱尔”,
“奥利维亚”,
“汉斯”,
“格伦尼”,
];
对于(var i=0;i{
返回-target.maxRight/2;
})
var valueAxis=chart.yAxes.push(新的am4charts.valueAxis());
valueAxis.tooltip.disabled=true;
valueAxis.renderer.ticks.template.disabled=true;
valueAxis.renderer.axisFills.template.disabled=true;
var series=chart.series.push(新的am4charts.ColumnSeries());
series.dataFields.categoryX=“category”;
series.dataFields.openValueY=“打开”;
series.dataFields.valueY=“关闭”;
series.tooltipText=“打开:{openValueY.value}关闭:{valueY.value}”;
series.sequencedInterpolation=真;
series.fillOpacity=0;
series.strokeOpacity=1;
series.columns.template.width=0.01;
series.tooltip.pointerooritation=“水平”;
var openBullet=series.bullets.create(am4charts.CircleBullet);
openBullet.locationY=1;
var closeBullet=series.bullets.create(am4charts.CircleBullet);
closeBullet.fill=chart.colors.getIndex(4);
closeBullet.stroke=closeBullet.fill;
chart.cursor=新的am4charts.XYCursor();
chart.scrollbarX=新的am4core.Scrollbar();
chart.scrollbarY=新的am4core.Scrollbar();
}
var KTPortletDraggable=函数(){
返回{
//启动模块的主要功能
init:函数(){
$(“#kt#u可排序的#u portlet”)。可排序({
连接:“.kt-portlet\u头”,
项目:“.kt portlet”,
不透明度:0.8,
句柄:'.kt-portlet___头',
科内霍尔波斯:没错,
占位符:“kt portlet--可排序占位符”,
大小:true,
公差:“指针”,
助手:“克隆”,
公差:“指针”,
强制占位符大小:!0,
助手:“克隆”,
cancel:“.kt portlet--sortable empty”//如果portlet处于全屏模式,则取消拖动
还原:250,//以毫秒为单位的动画
更新:功能(b、c){
if(c.item.prev().hasClass(“kt portlet--可排序为空”)){
c、 item.prev()在(c.item)之前;
}
}
});
}
};
}();
jQuery(文档).ready(函数(){
图纸();
KTPortletDraggable.init();
});
这是我的完整代码:
我不清楚到底是什么阻止了图表的调整 开始拖动大div时,图表的父div(
.kt portlet
)将获得显示:无代码>。停止拖动后,它将被设置回flexbox,图表将不再自动调整大小(请尝试通过devtools手动更新\kt\u chart1
的宽度)
但是,如果手动将图表div的父级(.kt-portlet\uu body
)或父级的父级重置为显示:块代码>,然后删除,不久之后,图表可以再次自动调整大小
因此,一种希望不会触发错误样式内容的不良闪现的黑客方法是在以下事件发生后的短时间内完成上述操作:
stop:函数(事件,用户界面){
setTimeout(函数(){
css('display','block');
}, 10);
setTimeout(函数(){
ui.item.css('显示','');
}, 20);
},
叉子:
顺便说一句,这是一个复制品