Wie schwebt du in ReactJS? - onMouseLeave wurde nicht während des schnellen Mauszeigers registriert
Wie erreichen Sie entweder ein hover-Ereignis oder active-event in ReactJS, wenn Sie inline-styling?
Habe ich festgestellt, dass die onMouseEnter, onMouseLeave Ansatz ist buggy, so hoffen es gibt einen anderen Weg, es zu tun.
Speziell, wenn man mit der Maus über eine Komponente sehr schnell, nur der onMouseEnter-event registriert ist. Die onMouseLeave nie ausgelöst, und so kann es nicht aktualisieren... verlassen Sie die Komponente, um Aussehen, als ob es noch schwebte über. Ich habe bemerkt, die gleiche Sache, wenn Sie versuchen und zu imitieren, der ":active" css-pseudo-Klasse. Wenn Sie auf wirklich schnell, nur das onMouseDown-Ereignis registriert wird. Die onMouseUp-Ereignis wird ignoriert... verlassen die Komponente erscheinen aktiv.
Hier ein JSFiddle zeigt das problem: https://jsfiddle.net/y9swecyu/5/
Video von JSFiddle mit problem: https://vid.me/ZJEO
Code:
var Hover = React.createClass({
getInitialState: function() {
return {
hover: false
};
},
onMouseEnterHandler: function() {
this.setState({
hover: true
});
console.log('enter');
},
onMouseLeaveHandler: function() {
this.setState({
hover: false
});
console.log('leave');
},
render: function() {
var inner = normal;
if(this.state.hover) {
inner = hover;
}
return (
<div style={outer}>
<div style={inner}
onMouseEnter={this.onMouseEnterHandler}
onMouseLeave={this.onMouseLeaveHandler} >
{this.props.children}
</div>
</div>
);
}
});
var outer = {
height: '120px',
width: '200px',
margin: '100px',
backgroundColor: 'green',
cursor: 'pointer',
position: 'relative'
}
var normal = {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0,
backgroundColor: 'red',
opacity: 0
}
var hover = {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0,
backgroundColor: 'red',
opacity: 1
}
React.render(
<Hover></Hover>,
document.getElementById('container')
)
InformationsquelleAutor der Frage HelpMeStackOverflowMyOnlyHope | 2015-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, eine dieser?
onMouseDown onMouseEnter onMouseLeave
onMouseMove onMouseOut onMouseOver onMouseUp
https://facebook.github.io/react/docs/events.html
er erwähnt auch die folgenden:
Reagieren, normiert Ereignisse, so dass Sie über konsistente Eigenschaften in unterschiedlichen Browsern.
Den event-Handler, unten ausgelöst werden durch ein Ereignis in der bubbling-phase. Registrieren Sie einen event-handler für die capture-phase, Anhängen, Aufnahme, um den Namen des Ereignisses ein; zum Beispiel, anstelle von onClick, die Sie verwenden würden, onClickCapture zu behandeln, das click-Ereignis in der capture-phase.
InformationsquelleAutor der Antwort Elon Zito
Den vorherigen Antworten sind ziemlich verwirrend. Sie brauchen nicht zu reagieren-Zustand zu lösen, noch irgendwelche speziellen externen lib. Es kann erreicht werden mit reinem css/sass:
Stil:
Das React-Komponente
Einem einfachen
Hover
Pure-Rendering-Funktion:Nutzung
Dann verwenden Sie es wie diese:
InformationsquelleAutor der Antwort dreampulse
Wenn Sie produzieren eine kleine demo zeigt die onMouseEnter /onMouseLeave oder onMouseDown /onMouseUp-Fehler, es würde sich lohnen, um es zu veröffentlichen, ReactJS die Seite Probleme oder mailing-Liste, einfach nur, um die Frage aufzuwerfen und zu hören, was die Entwickler zu sagen haben.
In Ihren Fall, Sie scheinen zu implizieren, dass CSS :hover-und :active-Staaten würde für Ihre Zwecke genügen, so schlage ich vor, Sie verwenden Sie Sie. CSS ist um Größenordnungen schneller und zuverlässiger als Javascript, weil es direkt umgesetzt in den browser.
Jedoch, :hover und :active Staaten kann nicht angegeben werden, in inline-styles. Was Sie tun können, ist, weisen Sie eine ID oder einen Klassennamen Ihrer Elemente und schreiben Sie Ihre Stile entweder in ein stylesheet, wenn Sie etwas konstanter in Ihrer Anwendung oder in einer dynamisch generierten
<style>
tag.Hier ist ein Beispiel für die letztere Technik: https://jsfiddle.net/ors1vos9/
InformationsquelleAutor der Antwort Tobia
Ich habe gerade stieß in das gleiche problem beim hören für onMouseLeave Ereignisse auf eine deaktivierte Taste. Ich arbeitete um es durch das hören der Muttersprache mouseleave-Ereignis auf ein element umschließt, die deaktiviert Schaltfläche.
Hier ist ein Turnschuh https://jsfiddle.net/qfLzkz5x/8/
InformationsquelleAutor der Antwort Cory Danielson
Kann man nicht mit den inline-styling allein. Nicht zu empfehlen reimplementing CSS-Eigenschaften in JavaScript haben wir bereits eine Sprache, die ist extrem leistungsfähig und unglaublich schnell gebaut für diesen Anwendungsfall -- CSS. So verwenden Sie es! Aus Stil zu unterstützen.
npm install style-it --save
Funktionale Syntax (JSFIDDLE)
JSX-Syntax (JSFIDDLE)
InformationsquelleAutor der Antwort Joshua Robinson
Ich hatte ein ähnliches Problem beim onMouseEnter genannt wurde, aber manchmal sind die entsprechenden onMouseLeave event nicht gefeuert, hier ist ein workaround, das funktioniert gut für mich (teilweise basiert auf jQuery):
Finden Sie auf jsfiddle: http://jsfiddle.net/qtbr5cg6/1/
Warum war es passiert (in meinem Fall): ich bin mit einem jQuery-scrolling-animation (durch
$('#item').animate({ scrollTop: 0 })
), die beim Klick auf das Element. Damit der cursor nicht verlassen, das Element "natürlich", aber während eine JavaScript-gesteuerte animation ... und in diesem Fall die onMouseLeave wurde nicht ordnungsgemäß ausgelöst durch Reagieren (Reagieren 15.3.0, Chrom-51, Desktop)InformationsquelleAutor der Antwort kunnix
Ich weiß, Es ist schon eine Weile her seit diese Frage gestellt wurde, aber ich habe gerade laufen in das gleiche Problem der Unvereinbarkeit mit onMouseLeave()
Was ich gemacht habe ist die Verwendung onMouseOut (), um die Dropdown-Liste und auf die Maus verlassen für das gesamte Menü, es ist zuverlässig und funktioniert jedes mal, wenn ich es getestet habe.
Ich sah die Ereignisse hier in den docs: https://facebook.github.io/react/docs/events.html#mouse-events
hier ist ein Beispiel mit https://www.w3schools.com/bootstrap/bootstrap_dropdowns.asp:
InformationsquelleAutor der Antwort RamiroIsBack
Ich persönlich benutze Stil für inline-Stil in Reagieren oder halten mein Stil separat in einem CSS oder SASS Datei...
Aber wenn Sie wirklich interessiert sind, es zu tun inline, Blick auf die Bibliothek, Teile ich einige der Verwendungen unter:
In der Komponente:
Ausgabe:
Auch Sie können JavaScript-Variablen mit hover in der CSS wie folgt :
Und das Ergebnis wie folgt:
InformationsquelleAutor der Antwort Alireza
können Sie
onMouseOver={this.onToggleOpen}
undonMouseOut={this.onToggleOpen}
muse over and out componentInformationsquelleAutor der Antwort Behnam Eskandari