我有一个内容可编辑的块,它有一个工具箱.当您将焦点放在内容可编辑块上时,工具箱将出现(它是实际工具栏的折叠按钮).如果您打开工具箱,需要将Bootstrap类"active"添加到工具箱中.如果我们完全将焦点放在内容块之外,该工具箱应该会消失(一个新的工具箱会出现在不同的内容块上).
由于需要单击工具箱,我无法让第三个事件侦听器按预期工作.
超文本标记语言:
.border.border-dark.p-4
.position-relative.w-100{data: {controller: "content", content:{block:{value: true}}}}
.position-absolute.bg-white{style: "right: 101%"}
%button.d-none.btn.btn-outline-dark{type: "button", data: {content_target: "toolbox", bs:{toggle: "collapse", target: "#toolbar1"}}}
%i.bi.bi-hammer
#toolbar1.collapse.position-absolute.bottom-100.bg-white.btn-toolbar{role: "toolbar", aria:{label: "Toolbar with button groups"}}
.btn-group.me-2{role: "group", aria:{label: "First group"}}
%button.btn.btn-outline-dark.active{type: "button"} H2
%button.btn.btn-outline-dark{type: "button"} H3
%button.btn.btn-outline-dark{type: "button"} H4
%button.btn.btn-outline-dark{type: "button"} H5
%button.btn.btn-outline-dark{type: "button"} H6
%button.btn.btn-outline-dark{type: "button"}
%i.bi.bi-paragraph
%p{contenteditable: true, data: {content_target: "contentBlock"}} This is some text
以及刺激计划
this.contentBlockTarget.addEventListener("focus", (event) => {
this.toolboxTarget.classList.remove("d-none")
})
this.toolboxTarget.addEventListener("click", (event) => {
this.toolboxTarget.classList.add("active")
this.toolboxTarget.classList.remove("active")
})
this.contentBlockTarget.addEventListener("focusout", (event) => {
this.toolboxTarget.classList.add("d-none")
})
以下是我的要求:
- If user focuses on the contentBlock (in this HTML it's a
),应出现工具箱(删除类"d-None").(First Event Listener在这方面做得很好)
- 如果用户点击工具箱,则添加"活动"类.(如果将第三个事件侦听器注释掉,则可以很好地工作).如果第三个侦听器处于活动状态,则单击工具箱会使其消失,因此工具栏不会实际出现.
- 如果用户在工具箱之外的任何地方单击,或者光标不再位于该区域(如将光标保持在该区域中),则需要重新添加"d-None".