2017-05-15 3 views
0

So habe ich eine Komponente, die ich mouseEnter und mouseLeave Ereignisse für, damit die Komponente nach unten und oben gleiten kann, wie die Maus eintritt und es verlassen.Wie man Ember Mouse Event Handler davon abhält, verzögert zu werden

Ich habe dies in jQuery schon oft ohne Ember getan und ich kann mich nicht erinnern, dass das jemals passiert ist. Was passiert, ist, dass es jedes mouseEnter- und mouseLeave-Ereignis ausführt (übereinander gestapelt). Wenn also ein Benutzer versehentlich in die Komponente mausiert und die Maus verlässt und dann wieder hineingeht, wird sie nach unten rutschen und dann nach oben gleiten , dann wieder runter rutschen. Wenn ich schnell ein- und ausfahre, gleitet es nach unten, oben, unten, oben, unten, oben. so oft wie ich es getan habe.

Konnte nichts finden, da es anscheinend schwer ist, etwas über obskure Anwendungen von Ember zu finden.

Dies ist, was ich in der Komponente JS-Datei:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    classNames: ['template-select', 'windows-select-container'], 

    mouseEnter: function() { 
    let $options = $('.windows-select-container > .vault-custom-container') 
    $options.slideDown(); 
    }, 

    mouseLeave: function() { 
    let $options = $('.windows-select-container > .vault-custom-container') 
    $options.slideUp(); 
    } 
}); 
+0

Haben Sie versucht, es mit Schließung Aktionen? Dies könnte Ihnen einen Leistungsschub geben. Entschuldige das vielleicht auch ein wenig. Berücksichtigen Sie die "Gleichzeitigkeit". – Lux

+0

SlideDown Art von Animation Sachen, die Sie verwenden können [liquid-fire ember addon] (https://github.com/ember-animation/liquid-fire) – kumkanillam

+0

Ich habe keine Schließungsaktionen versucht. Ich habe es früher mit Aktionen ausprobiert, ohne es zu einer Komponente zu machen, aber es hat nicht funktioniert, aber dieses Zeug verwirrt mich, weil es die Aktionen im Controller für die Route will, aber wenn ich es dort anbringe funktioniert es nicht und kann es auch nie finde heraus, warum. Denken Sie daran, wenn möglich eine reine CSS-Lösung zu verwenden. Sehen Sie, ob ich die Höhe von 0px auf die Höhe überführen kann. Der Container des übergeordneten Elements wird auf Höhe gesetzt: auto, wodurch der Container ebenfalls vergrößert/verkleinert wird. –

Antwort

0

So landete ich einen reinen CSS-Ansatz nach oben, unten beschrieben:

.windows-select-container { 
    cursor: default !important; 
} 

.vault-custom-container { 
    margin-top: 0px; 
    height: 0px; 
    overflow: hidden; 
    -webkit-transition: 300ms ease-in-out; 
    -moz-transition: 300ms ease-in-out; 
    transition: 300ms ease-in-out; 
    -webkit-transition-property: margin-top, height; 
    -moz-transition-property: margin-top, height; 
    transition-property: margin-top, height; 
} 

.windows-select-container:hover .vault-custom-container { 
    margin-top: 25px !important; 
    height: 44px !important; 
} 
+0

Ich werde wahrscheinlich den ': hover' Teil als direktes Kind anstelle aller Elemente (Leerzeichen) ändern ... aber ansonsten tut das, was ich brauche. Irgendwie zusätzlich zu dem "Lag" schien es auch Frames aus irgendeinem Grund an Punkten fallen zu lassen. Nicht sicher warum. –

Verwandte Themen