javascript - Vue.js 根据视口(viewport)大小更改开关类

标签 javascript vue.js

我正在显示一个侧边栏,它使用以下方式默认打开:

<div class="content" :class="{'sidebar-close': !sidebarOpened}">

不过,我希望在移动设备上有相反的行为。只是不确定如何使用 Vue/Typescript 执行此操作。

<template>
 <div id="app">
<div v-if="getroute == false">
  <navbar />
</div>
<div class="content" :class="{'sidebar-close': !sidebarOpened}">
  <div class="main-container">
    <app-main />
  </div>
  <div class="menus" @click="toogleSidebar">
  </div>
  <div v-if="getroute">
    <div class="vsidebar">
      <sidebar />
    </div>
  </div>
  <div v-else>
    <div class="sidebar">
      <sidebar />
    </div>
  </div>
 </div>
<div v-if="getroute == false">
  <Footer/>
</div>
<script lang="ts">
import { Component, Vue, Provide } from 'vue-property-decorator'
import { AppMain, Navbar, Sidebar, Footer} from './components'
import { Getter, Action } from 'vuex-class';
import { IViewState } from '@/store/view';

@Component({
  name: 'Layout',
  components: {
    AppMain,
    Navbar,
    Sidebar,
    Footer,
  }
})

export default class extends Vue {
  private isActive: Boolean = false
  @Getter('viewStore/sidebarOpened') private sidebarOpened!: IViewState;
  @Action('viewStore/toogleSidebar') private toogleSidebar!: () => void;
  @Action('viewStore/setProductArticles') private setProductArticles!: () => void;
  @Action('viewStore/setProducts') private setProducts!: () => void;
  mounted() {
  }   
}    
</script>

最佳答案

您可以监听窗口 resize 事件然后使用 matchMedia计算类别。

<div :class='[sideBarClass]'>Sidebar</div>
...
  mounted() {
    this.handleResize()
    window.addEventListener('resize', this.handleResize)
  },
  destroyed() {
    window.removeEventListener('resize', this.handleResize)
  },
  methods: {
    handleResize() {
      this.sideBarClass = window.matchMedia('(max-width: 600px)').matches
      ? 'mobile-sidebar' : 'desktop-sidebar'
    }
  }
...

Example

关于javascript - Vue.js 根据视口(viewport)大小更改开关类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239954/

相关文章:

javascript - 无法在 react 映射之外访问返回值

javascript - 如何在 Laravel 5.1 中的 javascript 中设置动态数据

javascript - Vue.js Firestore 保存地理点

javascript - Vuex mapAction 的“未知操作类型”

vue.js - Vue 模板是否可以自定义属性绑定(bind)?

javascript - 将 Selenium-IDE 源代码导出为 JavaScript 代码

javascript - 无法从 W3schools.com 的移动浏览器自动幻灯片更改图像大小

javascript - React 中的惰性是什么?

javascript - 如何在 Vuex 中将同一个对象复制到两个变量而不相互改变?

javascript - vue js 计算方法