代码之家  ›  专栏  ›  技术社区  ›  Synthaze

onclick调用JS函数

  •  -1
  • Synthaze  · 技术社区  · 2 年前

    下面的示例代码加载一个带有“显示3D”可点击分区的页面。点击后,它应该加载一个3D查看器并显示相关数据。

    function showPDB(path,id) {
      var stage = new NGL.Stage(id, {backgroundColor:'white'});
      stage.loadFile(path).then(function (o) {
        o.addRepresentation("cartoon", {color: 'white' });
        o.autoView();
      });
    };
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
      <script src="https://cdn.jsdelivr.net/npm/ngl@latest/dist/ngl.min.js"></script>
    </head>
    
    <body>
      <div class="row">
        <div class="col" data-toggle="collapse" data-target="#show_0" id="_show_0" onclick="showPDB('https://alphafold.ebi.ac.uk/files/AF-P08047-F1-model_v4.pdb', 'viewport_0')">
          <b>Show 3D</b>
        </div>
      </div>
    
      <div id="show_0" class="collapse">
        <div class="row">
          <div class="col">
            <div id="viewport_0" style="width:100%; height:800px;"></div>
          </div>
        </div>
      </div>
    </body>
    
    </html>

    似乎需要单击两次“显示3D”才能加载3D查看器。我希望点击一下就能加载。

    我想只有当可折叠元件的内部已经完全加载时,才应该触发此功能。我试着朝这个方向调整,但我还找不到解决办法。

    1 回复  |  直到 2 年前
        1
  •  2
  •   Vishnu Vinod    2 年前

    由于它是可折叠的,只需给可折叠的一些时间来装载。要做到这一点,您可以将整个脚本封装在一个设置的超时内,如下所示

    function showPDB(path,id) {
      setTimeout(() => {
        var stage = new NGL.Stage(id, {backgroundColor:'white'});
        stage.loadFile(path).then(function (o) {
          o.addRepresentation("cartoon", {color: 'white' });
          o.autoView();
        });
      });
    };