切换香草风格

Posted

技术标签:

【中文标题】切换香草风格【英文标题】:Toggle style in vanilla 【发布时间】:2018-03-22 19:51:04 【问题描述】:

是否有任何允许在元素上切换样式(而不是类)的原生 javascript 函数?

到目前为止,我正在使用这种脚本:

target.addEventListener('click', (e) => 
    target.classList.toggle('target--is-visible')

按照风格:

target 
    visibility: hidden;

    &--is-visible 
        visibility: visible;
    

我很乐意被允许这样做:

target.addEventListener('click', (e) => 
    target.style.toggle.visibility = 'visible'



编辑

Ternary Operator 在可读性方面最接近我所寻找的。​​p>

@GuyWhoKnowsStuff 发送的函数使用三元运算符,值得分享:

const div = document.querySelector('div');

function toggleStyle(el, prop, style1, style2) 
  el.style[prop] = el.style[prop] === style1 ? style2 : style1;


div.addEventListener('click', e => 
  toggleStyle(div, 'background', 'red', 'blue');
);

感谢您的回答!

【问题讨论】:

你可以尝试类似target.style.visibility = target.style.visibility == 'visible' ? 'hidden' : 'visible' 但是切换css类是更干净的方法 @Satpal - toggle 不是样式属性 感谢四位您的评论@Satpal!这是我正在寻找的简单方法。为什么不是更清洁的方法?在可读性或性能方面? 【参考方案1】:

试试这个:

const div = document.querySelector('div');

function toggleStyle(el, prop, style1, style2) 
  el.style[prop] = el.style[prop] === style1 ? style2 : style1;


div.addEventListener('click', e => 
  toggleStyle(div, 'background', 'red', 'blue');
);
div 
  padding: 40px;
  background: red;
<div>Click Me</div>

或者在您的情况下,如果 div 可见性被隐藏,我不相信点击事件会触发,

见CSS: Is a hidden object clickable?,

所以改为像这样切换不透明度:

const div = document.querySelector('div');

function toggleStyle(el, prop, style1, style2) 
  el.style[prop] = el.style[prop] === style1 ? style2 : style1;


div.addEventListener('mousedown', e => 
  toggleStyle(div, 'opacity', '0', '1');
);
div 
  padding: 40px;
  background: red;
  opacity: 1;
<div>Click Me</div>

【讨论】:

实际上我并不是在寻找切换元素的可见性,而是更多地寻找切换样式的一般好方法。三元运算符是最接近的,但您的自定义函数可能非常有用!所以谢谢你的回答:)【参考方案2】:

你也可以像这样添加原型:

htmlElement.prototype.toggleVisibility = function()

    this.style.visibility = this.style.visibility == 'visible' ? 'hidden' : 'visible'

然后像下面这样使用:

target.toggleVisibility();

它将在每次调用时使其可见和隐藏。

【讨论】:

【参考方案3】:

您可以使用ternary operator 进行切换

target.addEventListener('click', (e) => 
  target.style.visibility = target.style.visibility == 'visible' ? 'hidden' : 'visible'

【讨论】:

以上是关于切换香草风格的主要内容,如果未能解决你的问题,请参考以下文章

如何使用香草 javascript 中的一个切换按钮调用 2 个不同的函数

切换系统主题风格

php网页界面模板切换,就是风格切换功能实现方法,谁知道?

Iphone 风格的切换按钮

FlutterUnit 更新 | 拓展样式风格切换 - 标准风格

《AndroidStudio每日一贴》3.高速切换代码风格配色方案和键盘