在 Stenciljs 中单击时更改 CSS 类
2019-11-12
3273
是否可以在 Stencil.js 中使用 W3School 的简单菜单动画?
https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_menu_icon_js
我正在尝试设置点击事件的样式,但无法使其工作。事件正在触发,但我无法设置类。
在我的 .tsx 中:
import { Component, Prop, h } from '@stencil/core';
@Component({
tag: 'topbar-component',
styleUrl: 'topbar-component.css',
shadow: true
})
export class Topbar {
private menuToggle(e) {
return (
e.classList.toggle("change");
);
}
render() {
return (
<div class="topbar-menu">
<div class="container" onClick={(e) => this.menuToggle(e)}>
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
</div>
)
}
}
在我的 css 中:
.bar1, .bar2, .bar3 {
width: 35px;
height: 5px;
background-color: #333;
margin: 6px 0;
transition: 0.4s;
}
.change .bar1 {
-webkit-transform: rotate(-45deg) translate(-9px, 6px);
transform: rotate(-45deg) translate(-9px, 6px);
}
.change .bar2 {opacity: 0;}
.change .bar3 {
-webkit-transform: rotate(45deg) translate(-8px, -8px);
transform: rotate(45deg) translate(-8px, -8px);
}
我收到错误:未捕获的 TypeError:无法读取未定义的属性“toggle”
3个回答
您可以使用状态属性来实现:
import { Component, Prop, State, h } from '@stencil/core';
@Component({
tag: 'topbar-component',
styleUrl: 'topbar-component.css',
shadow: true
})
export class Topbar {
@State() isMenuOpen: boolean = false;
private menuToggle() {
this.isMenuOpen = !this.isMenuOpen;
}
render() {
return (
<div class="topbar-menu">
<div class={{ container: true, change: this.isMenuOpen }}" onClick={(e) => this.menuToggle(e)}>
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
</div>
)
}
}
Thomas
2019-11-13
我成功了。我终于找到了 classlist。
所以只需将其添加到你的 menuToggle() 中即可
private menuToggle(e) {
return (
e.currentTarget.classList.toggle("change")
);
}
Johan Byrén
2019-11-12
我认为以下代码可以帮助处理您的问题:
import { Component, Prop, h } from '@stencil/core';
@Component({
tag: 'topbar-component',
styleUrl: 'topbar-component.css',
shadow: true
})
export class Topbar {
private menuToggle() {
this.isMenuOpen = !this.isMenuOpen
}
render() {
return (
<div class="topbar-menu">
{this.isMenuOpen
?
<div class=container change" onClick={() => this.menuToggle()}>
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
:
<div class=container" onClick={() => this.menuToggle()}>
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
}
</div>
)
}
}
amir tbi
2023-02-20