迷你MVVM框架 avalonjs 學習教程十、樣式操做

通常狀況下咱們經過設置類名就能夠改變元素的樣式,但涉及到動畫部分,就必定須要設置內聯樣式了,所以有了ms-css。*ms-css*的用法爲ms-css-樣式名="樣式值", 如ms-css-width=」prop」(會自動補px),ms-css-height=」{{prop}}%」, ms-css-color=」prop」, ms-css-background-color=」prop」, ms-css-font-size=」{{prop}}px」。細細聯想,ms-css與ms-class的舊風格、ms-data、ms-attr的用法相仿,屬性名接第三個參數做爲name,屬性值做爲value。javascript

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <script src="avalon.js"></script>
        <script>
            var model = avalon.define({
                $id: "test",
                background: "red"
            })
            model.$watch("background", function(v) {
                model.background = v
            })

        </script>
    </head>
    <body>
        <div ms-controller="test">
            <div style="width:200px; height:50px" ms-css-background="background">

            </div>
            <select ms-duplex="background">
                <option value="red">紅</option>
                <option value="yellow">黃</option>
                <option value="green">綠</option>
            </select>
        </div>
    </body>
</html>

enter image description here

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="avalon.js" ></script>
        <script>
            var model = avalon.define({
                $id: "test",
                percent: 0
            })
            var a = true
            var id = setInterval(function() {
                if (a) {
                    if (model.percent < 100) {
                        model.percent++
                    } else {
                        a = false
                    }
                } else {
                    if (model.percent > 0) {
                        model.percent--
                    } else {
                        a = true
                    }
                }
            }, 100)
        </script>
        <style>
            .handerx{
                width:20px;
                height:20px;
                position: absolute;
                color:#fff;
                background: #000;
            }
            .sliderx{
                width:100%;
                height:20px;
                position: relative;
            }
            .body{
                padding:40px;
            }
        </style>
    </head>
    <body ms-controller="test" class="body">
        <div class="slider" style="background:red;">
            <div class="handerx" ms-css-left="{{percent}}%" >{{percent}}</div>
            <div style="background: greenyellow;height:20px" ms-css-width="{{percent}}%"></div>
        </div>
        <div class="sliderx" style="background:#d2d2d2;">
            <div style="background: #2FECDC;height:20px" ms-css-width="{{100-percent}}%"></div>
        </div>
    </body>
</html>

enter image description here

<!DOCTYPE html>
<html>
    <head>
        <title>ms-css</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
        <script src="../avalon.js" ></script>
        <script>
            var vm = avalon.define({
                $id: "test",
                w: 100,
                h: 100,
                click: function() {
                    vm.w = parseFloat(vm.w) + 10;
                    vm.h = parseFloat(vm.h) + 10;
                }
            })

        </script>
    </head>
    <body>
        <div ms-controller="test">
            <div style=" background: #a9ea00;" ms-css-width="w" ms-css-height="h"  ms-click="click"></div>
            <p>{{ w }} x {{ h }}</p>
            <p>W: <input type="text" ms-duplex="w" data-duplex-event="change"/></p>
            <p>H: <input type="text" ms-duplex="h" /></p>
        </div>
    </body>
</html>

enter image description here

ms-css已經在內部幫你處理好兼容問題,如opacity在舊式IE下用濾鏡替換, tranform的私有前綴添加什麼的。 最後要注意一點,屬性值不能加入CSS hack與important!css

相關文章
相關標籤/搜索