@danilr

Как отслеживать ширину экрана Vue?

Есть вычисляемое свойство, значение которое должно исходить из ширины экрана. Вопрос в том, как мне постоянно отслеживать это значение.
isOpenAllFiltersWith(){
      if(document.documentElement.clientWidth <= 500){
        return true
      }
      else return this.isOpenAllFilters
    },

При первой загрузке оно выполняется правильно, но если изменяешь размер окна - то уже свойство не пересчитывается. Как это исправить?
  • Вопрос задан
  • 14170 просмотров
Решения вопроса 4
0xD34F
@0xD34F Куратор тега Vue.js
Добавьте в компонент свойство, которое будет содержать ширину экрана; при создании экземпляра компонента подписывайтесь на события изменения размеров экрана, в обработчике обновляйте свойство компонента:

data: () => ({
  width: 0,
}),
created() {
  const onResize = () => this.width = window.innerWidth;
  onResize();
  window.addEventListener('resize', onResize);
  this.$on('hook:beforeDestroy', () => window.removeEventListener('resize', onResize));
},

https://jsfiddle.net/ma367d5w/

Это если, как вы сказали, "постоянно отслеживать". Но судя по показанному коду, вам надо несколько иное - знать, как ширина экрана соотносится с определённым значением, больше/меньше. Так что отслеживать все изменения ширины необходимости нет:

data: () => ({
  isWidthOK: false,
}),
created() {
  const mql = window.matchMedia('(max-width: 600px)');
  const onChange = () => this.isWidthOK = mql.matches;
  onChange();
  mql.addEventListener('change', onChange);
  this.$on('hook:beforeDestroy', () => mql.removeEventListener('change', onChange));
},

https://jsfiddle.net/ma367d5w/1/
Ответ написан
Комментировать
Vlad_IT
@Vlad_IT
Front-end разработчик
Есть событие onresize
Слушаете его в своем компоненте. и при срабатывании выполняйте нужный метод.
Ответ написан
wapster92
@wapster92
Пример кода по использованию события resize, надеюсь вы достаточно знаете js, тобы применить свой код.
Ответ написан
Комментировать
Xuxicheta
@Xuxicheta
инженер
window.addEventListener('resize' , () => {
  this.sizeX = document.documentElement.clientWidth;
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы