Vue.js ist meine erste reaktive Bibliothek und ich habe Probleme mit Methoden und Kindelementen. Ich vermute, ich vermisse etwas Offensichtliches.JavaScript-Methoden und Kindelemente in Vue.js
In meinem Beispiel verfügen die gerenderten Listenelemente über Methodenhandler für Hover-Ereignisse (mouseenter & mouseleave). Jedes Listenelement ist ein übergeordnetes Element eines Elements <video>
, das standardmäßig angehalten wird. Wenn die Maus ein Listenelement eingibt, spielt ihr Kind(elem.play()). Das Video wird angehalten, wenn die Maus das Listenelement verlässt.
Voll Beispiel: https://jsfiddle.net/matbergman/hcgtkbwt/8/
<ul class="contentList">
<li v-for="item in items" v-on:mouseover="videoPlay()" v-on:mouseleave="videoPause()">
<video loop="loop" v-bind:src="item.video"></video>
<p>
{{item.description}}
</p>
</li>
</ul>
<script>
var vm = new Vue ({
el: ".contentList",
data: {
items: [
{
video : "http://206.130.101.116/misc/video01.mp4",
description : "Video 1"
},
{
video : "http://206.130.101.116/misc/video02.mp4",
description : "Video 2"
},
{
video : "http://206.130.101.116/misc/video03.mp4",
description : "Video 3"
}
]
},
methods: {
videoPlay: function() {
console.log("play");
vm.$el === document.getElementById('example')
// Play the child video, something like: this.getElementsByTagName("video")[0].play();
},
videoPause: function() {
console.log("pause");
// Pause the child video, something like: this.getElementsByTagName("video")[0].pause();
}
}
});
</script>
Meine Methode erkennt die Mausereignisse. Wie wende ich die Methode play() an das Kind <video>
an?
$("li").mouseenter(function() {
this.getElementsByTagName("video")[0].play();
});
Aber der Umfang der this
ist natürlich durch meine $ el Variable anstelle des Elements mit dem beigefügten Ereignis definiert, wie ich es gewohnt bin: In jQuery wäre es so etwas wie. Wird die Methode play() irgendwie als Eigenschaft einer Komponente übergeben?
Danke für die klare Antwort. Jetzt weiß ich, wie ich auf die Veranstaltung zugreifen kann. – user608684