zoom與scale的異同點



1.兼容性問題

zoom不是css的標準屬性,Firefox和Opera Mini 不支持,其他標準的瀏覽器倒是都可以很好的支持。ie從ie6以後就開始支持這個屬性。這個屬性用起來有風險,比如要考慮Firefox的兼容性問題。

tranform:scale(x) 則是css的標準屬性,除Opera Mini外,得到了幾乎所有標準瀏覽器的支持。ie瀏覽器是在ie11後開始支持,不過ie9和ie9以後的瀏覽器都支持帶前綴的屬性-ms-transform。如果你的網頁要兼容ie8及其以前的ie瀏覽器,就需要做兼容性處理,其實更好的辦法是離職吧,現在都什麼時代了,怎麼可能還要兼容這麼古老的瀏覽器,當然了,我是開玩笑的,畢竟你窮,怎麼可以輕易離職。

2.取值問題

zoom的取值可以normal,可以是大於等於0的浮點數,也可以是大於等於0的百分比。其中normal就是元素實際的尺寸,不縮也不放,安安靜靜的像一個處子。當zoom的值爲0時,zoom也是不縮也不放,跟zoom爲1的情況一樣

transform:scale(x)的取值只能是數字,不能是百分比或者其他,但是取值可以是正數也可以是負數和0。其中x爲0的時候,元素直接縮到消失不見了。x爲負數的時候,元素會順時針旋轉180度,也可能是逆時針,我也不知道反正上下顛倒了。我指的是2d平面,3d的平面我沒研究。

而且scale是可以使用scaleX()、scaleY()、scaleZ()單獨放大x、y、z不同軸。zoom只能等比放大。

3.顯示效果

3.1縮放點

zoom是以左上角有原點進行縮放的,並且默認這個點還不能改變。如果要要實現中心的放大縮小的效果就需要動用下js動態改變元素的位置,或者你要是個牛逼哄哄的人,你就可以考慮使用ie的矩陣變換。雖然我高考數學不低130,但是我還是看不懂ie的矩陣變換到底是咋回事。

transfrom:scale(x)的變化默認是以中心點爲準變化的,而且這個變化的點是可以通過transform-origin進行改變。

3.2位置

zoom縮放後的元素是佔據實際位置的。比如zoom的元素後緊跟一個名字叫other的div。元素被放大後名字叫other的div也被擠下去了。

而scale縮放的元素是不佔據實際位置的,被scale放大的元素,看起來很大,但是實際佔據的位置還是之前那麼小。所以其他元素並不會因此而改變位置。

還有一點需要注意,雖然scale被放大的元素不佔據實際位置,但是還是可以響應事件的。

無論元素是使用zoom放大縮小還是使用scale放大縮小,元素上綁定點擊事件的話,點擊元素都會響應事件的。

4.性能

因爲zoom是實際改變物體大小的,而且這種改變會影響到其他元素,所以使用zoom的時候會引起瀏覽器重新渲染,性能較低。而scale是單獨只改變目標元素,並不會影響到其他的元素,所以性能會好一些。

 5.點擊查看頁面效果

點擊查看效果

複製代碼

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>room&scale</title>
    <style>
        
        html,body{
            margin: 0px;
            padding:0px;
        }
        div{
            text-align: center;
        }
        h2{
            text-align: center;
            padding-bottom: 20px;
            margin:0px;
            border-bottom: 1px dashed black;
        }
        .content{
            width: 100px;
            margin: auto;
            height: 2000px;
            border-left:1px solid black;
            position: relative;
        }
        /*zoom*/
        .zoomW{
            position: relative;
        }
        .div1{
            width: 100px;
            height:100px;
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid blue;
        }
        .div2{
            width: 100px;
            height: 100px;
            zoom:2;
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid green;
        }
        .div3{
            width: 100px;
            height: 100px;
            zoom:4;
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid red;
        }
        .div4{
            width: 50px;
            height: 50px;
            border: 1px solid yellow;
        }
        /*scale*/
        .zoomT2,.scaleT{
            margin-top:600px;
        }
        .scaleW{
            position: relative;
            
        }
        .scaleW div{
            /*transform-origin:0 0;*/
        }
        .div5{
            width: 100px;
            height:100px;
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid blue;
        }
        .div6{
            width: 100px;
            height: 100px;
            transform: scale(2);
            -webkit-transform: scale(2);
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid green;
        }
        .div7{
            width: 100px;
            height: 100px;
            -webkit-transform: scale(4);
            top:0px;
            left:0px;
            position: absolute;
            border: 1px solid red;
        }
        .div8{
            width: 50px;
            height: 50px;
            border: 1px solid yellow;
        }
        .other{
            width: 100px;
            height: 100px;
            border:1px solid darkblue;
        }
        .zoomO1{
            width: 100px;
            height: 100px;
            zoom:1;
            outline: 1px solid blue;
        }
        .zoomO2{
            width: 100px;
            height: 100px;
            zoom:2;
            outline: 1px solid green;
        }
        .scaleO1{
            width: 100px;
            height: 100px;
            outline: 1px solid blue;
        }
        .scaleO2{
            width: 100px;
            height: 100px;
            transform: scale(2);
            -webkit-transform: scale(2);
            outline: 1px solid green;
        }
    </style></head><body>
    <div class="content">
        <div class="zoomT">
            <h2>zoom</h2>
        </div>
        <div class="zoomW">
            <div class="div1">
                div1            </div>
            <div class="div2">
                div2            </div>
            <div class="div3">
                div3                <!-- <div class="div4">
                    div4
                </div> -->
            </div>
            
        </div>
        
        <div class="scaleT"><h2>scale</h2></div>
        <div class="scaleW">
            
            <div class="div5">
                div5            </div>
            <div class="div6">
                div6            </div>
            <div class="div7">
                div7                <!-- <div class="div8">
                    div8
                </div> -->
            </div>
            
        </div>
        <div class="zoomT2"><h2>zoom&other</h2></div>
        <div class="zoomOther">
            <div class="zoomO1">
                zoom:1            </div>
            <div class="other">
                
            </div>
            <div class="zoomO2">
                zoom:2            </div>
            <div class="other">
                other            </div>
        </div>
        <div class="scaleT"><h2>scale&other</h2></div>
        <div class="scaleOther">
            <div class="scaleO1">
                scale(1)            </div>
            <div class="other">
                other            </div>
            <div class="scaleO2">
                scale(2)            </div>
            <div class="other">
                other            </div>
        </div>
        
    </div>
    <script>
        var zoomO2 = document.querySelector(".zoomO2");
        zoomO2.onclick=function(){
            console.log("zoomO2");
        }        var scaleO2 = document.querySelector(".scaleO2");
        scaleO2.onclick=function(){
            console.log("scaleO2");
        }    </script></body></html>

複製代碼

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章