Как вы заметили, это потому, что идентификаторы являются глобальными, и getElementById
вернет первый элемент в DOM с этим идентификатором. Он ничего не знает о * Vue границах компонента.
Правильный способ доступа к элементу внутри компонента - использовать $refs
, а не getElementById
.
<div ref="playerName">...</div>
changeOpacity () {
this.$refs.playerName.style.opacity = 0.5
}
Однако прямое манипулирование DOM не очень Vue способ сделать это. Вместо этого следует связать непрозрачность со свойством данных и изменить его.
<div :style="{ opacity }">...</div>
data () {
return {
opacity: 1
}
}
changeOpacity () {
this.opacity = 0.5
}
В полном объеме:
new Vue({
el: '#app',
data () {
return {
opacity: 1
}
},
methods: {
changeOpacity () {
this.opacity = 0.5
}
}
})
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<div id="app">
<div :style="{ opacity }">
Content
</div>
<button @click="changeOpacity">Change</button>
</div>
Если это просто заданное значение c для непрозрачности, например, 0,5, тогда вам действительно следует использовать класс CSS. Это будет выглядеть примерно так:
new Vue({
el: '#app',
data () {
return {
halfHide: false
}
},
methods: {
changeOpacity () {
this.halfHide = true
}
}
})
.half-hide {
opacity: 0.5;
}
<script src="https://unpkg.com/vue@2.6.11/dist/vue.js"></script>
<div id="app">
<div :class="{ 'half-hide': halfHide }">
Content
</div>
<button @click="changeOpacity">Change</button>
</div>