J'ai un tableau avec un en-tête collant et un tbody défilant mais je ne peux pas obtenir mon ' scroll ou' window.addEventListener ( 'scroll') 'pour travailler du tout. Comment détecter un scroll dans un table body uniquement?
created() {
window.addEventListener('scroll', this.handleScroll);
},
destroyed() {
window.removeEventListener('scroll', this.handleScroll);
},
methods: {
handleScroll() {
console.log('scrolled)
},
}
J'ai essayé d'ajouter v-scroll = "handleScroll " à table & tbody mais ne l'appelle toujours pas même lorsque je place la souris dans la table et scroll code>
3 Réponses :
Ajoutez le Listener d'événements à l'élément de table. Si cela ne fonctionne pas, essayez d'ajouter l'écouteur d'événements au tbody
<table @scroll="handleScroll"> <!-- ... --> </table>
Selon ma description, cela ne fonctionne pas. J'ai déjà essayé ça comme je l'ai mis
Vous pouvez utiliser l'écouteur v-on: scroll.passive . Voici un exemple:
<script src="https://unpkg.com/vue/dist/vue.min.js"></script>
<div id="app">
<table>
<thead>
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
</thead>
<tbody v-on:scroll.passive='handleScroll'>
<tr>
<td>January</td>
<td>$100</td>
</tr>
<tr>
<td>February</td>
<td>$80</td>
</tr>
<tr>
<td>March</td>
<td>$90</td>
</tr>
<tr>
<td>April</td>
<td>$190</td>
</tr>
<tr>
<td>May</td>
<td>$80</td>
</tr>
<tr>
<td>June</td>
<td>$30</td>
</tr>
</tbody>
</table>
</div>
table {
width: 100%;
}
thead, tbody, tr, td, th { display: block; }
tr:after {
content: ' ';
display: block;
visibility: hidden;
clear: both;
}
thead th {
height: 30px;
/*text-align: left;*/
}
tbody {
height: 80px;
overflow-y: auto;
}
tbody td, thead th {
width: 19.2%;
float: left;
}
new Vue({
el: '#app',
methods:{
handleScroll(e){
console.log("scroll");
}
}
})
J'ai essayé votre solution et elle ne se déclenche toujours pas. Je ne sais pas pourquoi, mais j'ai maintenant inclus mon HTML complet
Ajout de @scroll à mon