Да, вы должны использовать метод mounted
для добавления прослушивателя события прокрутки. Пример на codepen . Но проблема в том, что добавление прослушивателя событий js не является способом . Вам нужно использовать v-on:scroll="chceckScrollBar"
для вашего элемента. Зачем? on:scroll
всегда вызывается, когда пользователь прокручивает элемент.
шаблон
<div id="app-vue">
<template>
{{percentage}}
<div class="modal" ref="progressbar"> Hello
<br>
....
<br></div>
</template>
</div>
Css
.modal {
width:200px;
max-height:300px;
overflow-y: scroll;
background-color:green;
}
Вю
let vm = new Vue({
data() {
return {
percentage:0,
};
},
methods: {
chceckScrollBar () {
const element = this.$refs.progressbar
const clientHeight = element.clientHeight
const scrollHeight = element.scrollHeight
const scrollTop = element.scrollTop
const res = (scrollTop / (scrollHeight - clientHeight)) * 100
if (scrollHeight <= clientHeight) {
this.percentage = 100
} else {
this.percentage = res.toFixed(2)
}
}
},
mounted() {
this.$refs.progressbar.addEventListener('scroll', this.chceckScrollBar );
},
beforeDestroy () {
this.$refs.progressbar.removeEventListener('scroll',this.chceckScrollBar );
},
el: '#app-vue'
})