javascript - 添加类与删除类以在网页上显示元素

标签 javascript html css

当前设计

在我设计的网站中,我有一些元素最初会隐藏起来,直到用户需要看到它们。例如,他们已滚动到页面上所需的高度。

目前这是通过 JavaScript 添加类 line.classList.add('show-header-line'); 来实现的

在 CSS 中,将在元素的主要样式旁边定义。这show类的变体将仅包含使元素可见所需的属性 opacity: 1 .元素的主要样式将包含最初隐藏元素所需的相反属性 opacity: 0.

替代方案

当然这也可以反过来。使用一个类来隐藏最初在 html 中设置的元素,然后在 JavaScript 需要时将其删除。

HTML

<div class="header-line hide-header-line" />

JS

line.classList.remove('hide-header-line');

注意事项

当然我可以在 JavaScript 中直接添加和删除样式(不需要额外的类),但这看起来更糟。关于缺乏关注点分离。

问题

我的当前方法 意味着生成的渲染 DOM 中散布着具有主样式 类和显示 类的元素。 替代方案 意味着我的 html 文件中充斥着具有主要样式 类和隐藏 类的元素。哪个被认为是更好的做法?有没有其他更简洁的方法可以做到这一点?

最佳答案

强烈建议不要为此使用opacity:0,而是使用display: none。原因是具有 opacity: 0 的元素仍然占据标记中的空间,而 display: none 会将元素添加到 DOM,但不会呈现在标记中(如果有意义的话)。

Here是更详细的解释

此外,一个使用滚动传递您所说的特定点的示例,这就是我要做的,注意代码未经测试。

window.addEventListener('scroll', function(){
  document.querySelector('#navigation').classList[this.scrollTop > 200 ? 'add' : 'remove']('fixed-nav');
});

CSS

.fixed-nav {
  width: 100%;
  position: fixed;
  top: 0;
  left: 0;
}

关于javascript - 添加类与删除类以在网页上显示元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487067/

相关文章:

php - 不允许在文本区域中使用 href 标签

Android Mail 应用不断调整内容大小

html - CSS 子级在父级中间距不均匀

css - 在 CSS 中将 div 放置在居中的 div 周围

iframe 上的 CSS float 属性,得到广泛支持?

javascript - 在客户端JS中加密请求参数,在Java中解密请求参数(Spring Controller )

javascript - 如何创建jquery全局变量

javascript - 我希望我的代码创建由具有输入数量的行和列的 block 组成的网格

javascript - 使用 jQuery 和 CSS 创建条形音箱

javascript - 从单击的表单提交中获取父级 div 的 id