如何在屏幕尺寸变化时改变 vue.js 数据值?

新手上路,请多包涵
<div id="app">
    <ul>
        <!-- On mobile devices use short heading -->
        <template v-if="mobile == 1">
            <li><a href="#">Heading</a></li>
        </template>
        <!-- Else use long heading -->
        <template v-else-if="mobile == 0">
            <li><a href="#">Heading Long</a></li>
        </template>
    </ul>
</div>

<script src="https://unpkg.com/vue@2.1.10/dist/vue.js"></script>
<script>
    var app = new Vue({
            el: '#app',
            data: {
                mobile: 0
            }
});

我正在寻找一种方法来在 (max-width: 547px) 的屏幕断点变为活动状态时更改“移动”的值。并在该移动断点变为非活动状态(屏幕超过 547 像素)时将其改回。我通常使用 skel ( https://github.com/ajlkn/skel ) 来处理屏幕断点,但我无法从 Vue 内部访问 skel,反之亦然。我会放弃使用 Vue 来完成这个特定任务,但是 display: none 和 display: block 会影响我的演示——将我的元素变成一个块。

原文由 Will Moore 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
2 个回答

检查这个库: https ://github.com/apertureless/vue-breakpoints

 <div id="app">
    <ul>
        <!-- On mobile devices use short heading -->
        <hide-at breakpoint="medium">
        <template v-if="mobile == 1">
            <li><a href="#">Heading</a></li>
        </template>
        </hide-at>
        <!-- Else use long heading -->
        <show-at breakpoint="mediumAndAbove">
        <template v-else-if="mobile == 0">
            <li><a href="#">Heading Long</a></li>
        </template>
        </show-at>
    </ul>
</div>

或者简单地使用 media queries ( https://www.w3schools.com/css/css3_mediaqueries_ex.asp )

CSS:

 @media screen and (max-width: 600px) {
    #app ul il:first-of-type {
        visibility: visible;
    }
    #app ul il:last-of-type {
        visibility: hidden;
    }
}

@media screen and (max-width: 992px) {
    #app ul il:first-of-type {
        visibility: hidden;
    }
    #app ul il:last-of-type {
        visibility: visible;
    }
}

当然,由您决定在什么断点上显示什么和隐藏什么,我希望这会有所帮助。

原文由 Taki 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 Vuetify ,则可以根据内置的 breakpoints xs、sm、md、lg、xl(如 Material Design 中指定)以编程方式调整数据值,如下所示:

 computed: {
  mobile() {
    return this.$vuetify.breakpoint.sm
  },
}

mobile 将更改为 true 一旦屏幕宽度小于 600px。

您的代码将是这样的(我还将 if 语句直接移动到 <li> 元素上):

 <div id="app">
    <ul>
        <!-- On mobile devices use short heading -->
        <li v-if="mobile"><a href="#">Heading</a></li>
        <!-- Else use long heading -->
        <li v-else><a href="#">Heading Long</a></li>
    </ul>
</div>

原文由 user11809641 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题