Search code examples
javascriptvue.jsskel

How to change vue.js data value when screen size changes?


<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/[email protected]/dist/vue.js"></script>
<script>
    var app = new Vue({
            el: '#app',
            data: {
                mobile: 0
            }
});

I'm looking for a way to change the value of 'mobile' when the screen breakpoint of (max-width: 547px) becomes active. And to change it back when this mobile breakpoint becomes inactive (screen goes over 547px). I normally use skel (https://github.com/ajlkn/skel) to deal with screen breakpoints, but I cannot access skel from inside Vue, or vice-versa. I would forego using Vue for this particular task, but display: none, and display: block throws off my presentation--turning my element into a block.


Solution

  • Check this library : 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>
    

    or simply go with 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;
        }
    }
    

    ofcourse it's up to you to decide what to show and what to hide on what breakpoint , i hope this helps.