#contact-drawer
正如 Darko Z 下面所说,这种闪烁的原因是浏览器渲染元素和您的 JavaScript 代码运行之间存在延迟。浏览器正在按照您的 CSS 和 HTML 的指示执行操作并显示元素,然后才表明文档已完成解析(DOM 就绪)并触发您的 JavaScript。
有几种方法可以解决这个问题(具有不同的兼容性)。本质上,您需要在元素渲染和 DOM 准备就绪之间或之前解释代码。
要使用 JavaScript 进行修补,您可以在元素之后立即添加一个内联脚本以将其显示设置为隐藏。此代码将在页面被解释时立即执行,而不是在 DOM 准备好时执行。就可访问性而言,我相信这是最简单、最安全的方法。
纯 JavaScript:
<section id="contact-drawer"></section>
<script>document.getElementById('contact-drawer').style.display = 'none';</script>
或使用 jQuery:
<section id="contact-drawer"></section>
<script>$("#contact-drawer").hide();</script>
要使用纯 CSS 进行修复,您可以将元素的显示属性设置为“无”。请注意,使用此解决方案,如果 JavaScript 被禁用,表单将无法访问。
CSS
#contact-drawer {
display:none;
}
要修复 CSS 并在禁用 javascript 时维护工作页面,您可以使用额外的:target
CSS 选择器并稍微更改链接和 JavaScript。目标选择器与旧浏览器不是 100% 兼容,但它比上面的纯 CSS 版本更易于访问。
CSS
添加与上面相同的样式,并使用选择器阻止复制设置显示:target
。这使得当您导航到http://zarin.me/#contact-drawer时,将激活 :target 样式并显示 #contact-drawer。
#contact-drawer {
display:none;
}
#contact-drawer:target {
display:block;
}
HTML
将锚点 href 从 更改为#
,#contact-drawer
以便在单击链接时激活:target
选择器。
<h3 class="contact">
<a href="#contact-drawer" class="toggle-drawer" style="">
<img src="img/envelope.png">
CONTACT
</a>
</h3>
JavaScript
return false
在函数末尾添加以在单击时停止浏览器导航#contact-drawer
(并激活:target
选择器).toggle-drawer
。
$('.toggle-drawer').click(function(){
$("#contact-drawer").slideToggle();
return false;
});