【问题标题】:footnote with javascript: how hide it clicking anywherejavascript脚注:如何隐藏它点击任何地方
【发布时间】:2021-03-20 04:27:52
【问题描述】:

我有一个网站,上面有几篇带脚注的论文。
到目前为止,我采用了经典系统,即通过内部链接引用文章底部的脚注,然后您可以通过单击注释编号从该链接返回论文正文。
但我发现使用 javascript 可以有一个更舒适的系统,将脚注 留在屏幕内 您正在阅读。
代码是这样的:

  function toggleDiv (divId) {
     $ ("#" + divId) .toggle ();
  }
.dynamicnote {display: none;  
   position: fixed;  
   bottom: 2%;  
   margin-left: auto;  
   margin-right: auto;}
<a href = "javascript: toggleDiv ('n1');" id = "1a"> 1 </a>  

<p id = "n1" class="dynamicnote"> <a href="#1a"> 1 </a> [sometext] </p>

问题是,如果我单击锚点(一旦阅读注释),这将非常有效,然后脚注消失了;否则,如果我单击下一个锚点,新的脚注会覆盖前一个脚注,这很丑陋且令人困惑。 你可以在url看到这个脚本

如何解决?也许使用 javascript 命令来隐藏在任何地方单击时显示的 div?

【问题讨论】:

    标签: javascript html css footnotes


    【解决方案1】:

    更新的答案:如果情况更糟,请告诉我,我会把旧的放回去。 更新二:这只适用于第二次点击,所以第一个链接不会有动画(但仍然像第一个一样工作)。我仍在研究第一次点击的解决方案。同样,如果情况更糟,请告诉我。

    var currDiv = 'footNote';
    function toggleDiv(divId) {
      if(currDiv=='footNote'){
        document.getElementById('footTwo').classList.add('no-height');
        document.getElementById('footTwo').innerHTML='';
        document.getElementById('footNote').classList.remove('no-height');
        var elem = document.getElementById(divId).cloneNode(true);
        elem.id = 'fntext';
        document.getElementById('footNote').appendChild(elem);
        var ftnt= document.getElementById('fntext');
        ftnt.replaceWith(...ftnt.childNodes);
        currDiv=0;
      }else{   
        document.getElementById('footNote').classList.add('no-height');
        document.getElementById('footNote').innerHTML='';
        document.getElementById('footTwo').classList.remove('no-height');
        var elem = document.getElementById(divId).cloneNode(true);
        elem.id = 'fntext';
        document.getElementById('footTwo').appendChild(elem);
        var ftnt= document.getElementById('fntext');
        ftnt.replaceWith(...ftnt.childNodes);
        currDiv = 'footNote';
      }
    }
    
    document.addEventListener("click", e => {
      if(e.target.className!=='href'){
        document.getElementById('footNote').innerHTML = '';
        document.getElementById('footTwo').innerHTML = '';
      }
    });
    .ftn {
      position: fixed;
      bottom: 10%;
      margin-left: auto;
      margin-right: auto;
      max-height: 100%;
      overflow: hidden;
      transition: max-height 0.8s ease-in-out;
    }
    
    .no-height {
      max-height:0;
      transition: max-height 0.8s ease-in-out;
      overflow-y: hidden;
    }
    .hide {
      display: none;
      color: red;
    }
    <a href="#1a" onclick='toggleDiv("n1")' id="1a" class='href'> 1 </a>
    <div id="n1" class="hide">
      <a href="#1a"> 1 </a> [sometext]
    </div>
    <br>
    <a href="#2a" onclick='toggleDiv("n2")' id="2a" class='href'> 2 </a>
    <div id="n2" class="hide">
      <a href="#2a"> 2 </a> [sometext2]
    </div>
    
    <div id='footNote' class='ftn'> </div>
    <div id='footTwo' class='ftn'> </div>

    【讨论】:

    • 是的,你的解决方案很好,但如果我能以某种方式隐藏每一个注释,而不只是用新注释替换旧注释,它可能会更好。跨度>
    • 你能更明确地说明你想要什么吗?我是一个但很困惑。这就是你想要的吗:单击 href 会显示脚注;单击脚注将删除脚注;单击不同的 href 替换脚注;单击其他任何地方都会删除脚注。它是否正确?我错过了什么吗?谢谢。
    • 最后一个可能不是必需的。至少第二个(单击脚注删除脚注)将是一个显着的改进。这一切都是不可能的,不是吗?
    • 这不是不可能的。这里给出的答案有效,但不是很好。我还在努力。
    • 你有机会看看更新的吗?
    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多