javascript - javascript脚注:如何隐藏它点击任何地方
问题描述
我有一个网站,上面有几篇带脚注的论文。
到目前为止,我采用了经典的系统,即通过内部链接引用文章底部的脚注,然后您可以通过单击注释编号从该链接返回论文正文。
但我发现使用 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?
解决方案
更新的答案:如果情况更糟,请告诉我,我会把旧的放回去。更新二:这只适用于第二次点击,所以第一个链接不会有动画(但仍然像第一个一样工作)。我仍在研究第一次点击的解决方案。同样,如果情况更糟,请告诉我。
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>
推荐阅读
- dictionary - Flutter - 如何在我的未来构建器文本小部件中获得价值回报
- swift - 将文本从 UITextView 保存到领域(Swift 5)时出现问题
- mysql - 有效的数据库使用
- apache-flink - 最终获得结果的 Flink 会话窗口
- javascript - 检查传递的元素是否被类 Angular 8 封装
- python - 从 Python 2.7 升级到 Python 3.8 后的 MemoryError
- python - 有没有一种有效的方法来查找 numpy 数组中框的平均值?
- mysql - php artisan migrate 没有在 laravel 7 中制作表格
- java - 特定主题的预训练向量、nlp、word2vec、词嵌入?
- r - 从 shinyWidgets 更改下拉按钮的 css 参数