javascript - 如何在 Lit-HTML 中使用事件监听器添加和删除类?

标签 javascript lit-html

我想在我的类中使用由“dragEnter”和“dragLeave”触发的 lit-html 模板创建的元素上添加和删除 'over':

#app {
  background-color: #72a2bc;
  border: 8px dashed transparent;
  transition: background-color 0.2s, border-color 0.2s;
}

#app.over {
  background-color: #a2cee0;
  border-color: #72a2bc;
}
const filesTemplate = () =>
html`
  <button id="app"     
    @dragover=${??}
    @dragleave=${??}     
  >
    Click Me
  </button>
`;

在我的旧系统中,我通过事件发射器在单独的模块中调用这些方法,但我希望可以使用 lit-html 在模板中将其全部定义。

 dragEnter(e) {
    this.view.element.className += ' over';
  }

  dragLeave(e) {
    this.view.element.className = element.className.replace(' over', '');
  }

最佳答案

这取决于您的自定义元素的外观。在您的模板中,您只需输入 @dragover=${this.dragEnter} 即可。但是,如果您希望将此应用于整个自定义元素而不仅仅是按钮,您可以执行以下操作:

connectedCallback() {
super.connectedCallback();

this.addEventListener('dragover', this.dragEnter);

}

如果您没有自定义元素并且仅使用 lit-html 本身,则必须将事件处理程序 dragEnter(e)dragLeave(e) 放入模板如下:@dragover=${this.dragEnter}

您需要在dragEnter中使用classList.add添加类,并在dragLeave中将其删除。将来你也许可以在 lit-html 中使用 classMap 指令,但是仅使用 classList 并没有什么问题。我会坚持只使用 classList。在遥远的将来,CSS 可能也会有一个选择器:Is there a CSS ":drop-hover" pseudo-class?

关于javascript - 如何在 Lit-HTML 中使用事件监听器添加和删除类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332184/

相关文章:

javascript - javascript中看似多余的三元运算符

polymer - state 和 setState 点亮元素在哪里?

javascript - LitElement 中的自定义属性访问器

html - 如何将引导导航栏实现为 lit-html/lit-element 中的组件

javascript - Lit-Html "object Object"代码显示在浏览器中

javascript - 使用 BringToFront() 时图像覆盖状态丢失 : leaflet

javascript - 如何在 Javascript 中将带逗号的数字作为字符串转换为 float

javascript - html中的选择顺序选择多个?

JavaScript:我无法导入任何东西

循环内的 JavaScript 闭包——简单实用的例子