gpt4 book ai didi

css - 快速移动鼠标时不会触发 OnMouseOut 事件(GWT - 所有浏览器)

转载 作者:行者123 更新时间:2023-11-28 09:39:44 25 4
gpt4 key购买 nike

我有一个 DIV 表示一个带有文本“HELLO”的蓝色矩形,当用户单击它时,它会将其颜色更改为红色和文本“BYE”,并且当用户将鼠标光标移出时,恢复其原始颜色和文本。这些样式在 CSS 中描述,文本由 GWT 事件控制(参见下面的 Java 代码)。

问题是,当我快速移动鼠标时,任何浏览器都不会触发 ONMOUSEOUT 事件。但如果我慢慢移动它,效果很好。

有什么想法吗?谢谢

MyFile.html

<div id="boxDiv" class="myStyle"></div>

MyFile.java

final Element boxDiv = DOM.getElementById("boxDiv");
DOM.sinkEvents((com.google.gwt.user.client.Element)boxDiv,Event.ONCLICK | Event.ONMOUSEOUT);
DOM.setEventListener((com.google.gwt.user.client.Element)boxDiv,new EventListener(){
public void onBrowserEvent(Event e) {
Element targetDiv = DOM.eventGetTarget(e);
switch (DOM.eventGetType(e)) {
case Event.ONCLICK: onClickHandler(e, targetDiv); break;
case Event.ONMOUSEOUT: onMouseOutHandler(e, targetDiv); break;
}
}

最佳答案

编辑

考虑到您修改后的问题和更改文本所增加的复杂性,让我们使用 GWT,因为 GWT 非常适合这类事情!

好的,首先是我们非常简单的 CSS 样式表:

.myStyle {
background-color: blue;
}

.myStyle-clicked {
background-color: red;
}

这是一个非常基本的 Widget,它几乎可以完全按照您的要求进行操作(很抱歉更改了文本,我对此进行了测试,并且我确信即使在非常快速地移动鼠标时它也能正常工作)在漂亮、简单的 Java (GWT) 中)代码:

private class MyWidget extends Composite {

private Label label = new Label();
private static final String originalText = "Hello world!";
private static final String clickedText = "Goodbye world!";

public MyWidget() {
sinkEvents(Event.ONCLICK | Event.ONMOUSEOUT);
label.setText(originalText);
initWidget(label);
setStyleName("myStyle");
}

@Override
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
switch (event.getTypeInt()) {
case Event.ONCLICK:
addStyleDependentName("clicked");
label.setText(clickedText);
break;
case Event.ONMOUSEOUT:
removeStyleDependentName("clicked");
label.setText(originalText);
break;
}
}

}

如果您只是担心 MOUSE_OVER 和 MOUSE_OUT,请使用旧答案

此问题的解决方案是停止以编程方式执行此操作,并使用 native 浏览器的事件处理系统来执行此操作,这将尽可能快。

为此,请使用 CSS hover 过滤器。对于点击,您不必担心,您的问题只是移入和移出,正如您发现的那样,您可能无法相信 JS 能够很好地处理这些情况。我认为目前所有的浏览器都支持这个:

<!DOCTYPE html>

<html>
<head>
<style>
.tt {
background-color: blue;
}
.tt:hover {
background-color: red;
}
</style>
</head>
<body>
<div class="tt">
The content of the body element is displayed in your browser.
</div>
</body>
</html>

我对此进行了测试,它适用于 Chrome、FF 和 IE9。 According to ther w3schools docs , 它也适用于 Safari 和 Opera。

关于css - 快速移动鼠标时不会触发 OnMouseOut 事件(GWT - 所有浏览器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com