【问题标题】:Hiding a <div> onload and display on click event not working correctly隐藏 <div> onload 并在单击事件时显示无法正常工作
【发布时间】:2016-10-25 06:33:13
【问题描述】:

我正在尝试在我的网站上使用 display:none 和 display:block。样式如下:

<style>
  .div_class {
    display: none;
  }
</style>

正文内容为:

<div class="div_class">
   <div id="graph_id"></div>
</div>

脚本是:

    <script>
      // some event occurs and sets the display property of div_class to block as follows
      $(".div_class").css('display','block'); 

      var BarGraph = echarts.init(document.getElementById('graph_id'), theme);
      BarGraph.setOption({  
       // properties that are set for the echart 'graph_id'
      });
    </script>

display: block; 使 div 可见,但设置的 echart 属性不呈现。 div 显示为空白。可能是什么原因?我无法弄清楚。请帮忙。谢谢:)

*************************** 编辑 ******************* ******************


另外,我认为标题可能具有误导性,因为我可以隐藏 div onload 并在点击时显示它。但是后来的渲染是我面临某些问题的地方。

【问题讨论】:

  • 那些属性是什么?你能做一个演示这个问题的sn-p吗?
  • JavaScript 是异步的,您的显示块可能不会像预期的那样发生。您也可以尝试隐藏 div 的内容而不是 div 本身。隐藏可见性或更复杂的方式将使用假加载器。
  • “我认为标题可能具有误导性” - 所以edit 它是不会误导的。
  • 图表是在一段时间后出现还是根本不出现?
  • @Rajesh 根本没有出现

标签: javascript jquery html css echarts


【解决方案1】:

显示 div 后重新渲染您的条形图

【讨论】:

  • 为什么? OP 已经说过他们的代码被调用以响应某些事件。
  • 如果您阅读 OP 代码中的注释部分,它会说 发生了一些事件... 所以我猜,它在 DOM 渲染之前不会发生
  • 这里有些事件指的是另一个echart图上的点击事件!
【解决方案2】:
 BarGraph .setOption({

工作原理与

相同
 BarGraph.setOption({

? (摆脱空间)

另外,尝试将所有代码包装在

$(document).ready(function() {
    ***code here***
});

编辑:

https://ecomfe.github.io/echarts-doc/public/tutorial-en.html#Introduction%20of%20ECharts%20features%0D

^ 从那里获取代码,将 jquery 添加到 head,将图表块包装在 div.container 中,显示:无,创建点击事件

$(document).on('click', function() { $(".container").show(); myChart.setOption(option); });

工作sn-p:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- including ECharts file -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="http://echarts.baidu.com/dist/echarts.common.min.js"></script>

</head>
<body>
	<style>
    	.container {
    		display: none;
    	}
    </style>
    <!-- prepare a DOM container with width and height -->
  click anywhere!
    <div class="container">
    	<div id="main" style="width: 600px;height:400px;"></div>
    </div>
    <script type="text/javascript">
        // based on prepared DOM, initialize echarts instance
        var myChart = echarts.init(document.getElementById('main'));

        // specify chart configuration item and data
        var option = {
            title: {
                text: 'ECharts entry example'
            },
            tooltip: {},
            legend: {
                data:['Sales']
            },
            xAxis: {
                data: ["shirt","cardign","chiffon shirt","pants","heels","socks"]
            },
            yAxis: {},
            series: [{
                name: 'Sales',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

        // use configuration item and data specified to show chart
    	$(document).on('click', function() {
    		$(".container").show();
    		myChart.setOption(option);
    	});
    </script>
</body>
</html>

【讨论】:

  • 对不起。此处空格输入错误。感谢您指出。是的,我会尝试你的建议。
  • 这似乎是一个错字,否则上面的代码块也将无法正常工作,从而将 div 设置为块。
【解决方案3】:

我已尝试使用chart.js 如果display 属性设置为none,则无法绘制图表。问题是visibility:hidden 保留空间,而display:none 不保留空间

<style>
  .div_class{
      visibility:hidden;
  }
</style>

尝试用上面的代码替换 css。我希望这会对你有所帮助:)

您可以参考以下帖子了解更多信息:Difference between visibility:hidden and display:none?

【讨论】:

  • 我用chart.js试过了,如果display:none已经完成,图表就无法绘制了。
  • 感谢您的告知。 :) 我是 stackoverflow 的新手,我使用它只有大约一周的时间。
【解决方案4】:
    <script>
      // some event occurs and sets the display property of div_class to block as follows

      $(".div_class").css('display','block').promise().done(function(){

          //draw graph here

          var BarGraph = echarts.init(document.getElementById('graph_id'), theme);
          BarGraph .setOption({  
           // properties that are set for the echart 'graph_id'
          });

      }); 


    </script>

试试上面的代码。我添加了 .promise() 它的作用只是在 css "display:block;" 之后应用然后开始图形绘制过程

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多