最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)動(dòng)畫中的布局轉(zhuǎn)換

 更新時(shí)間:2021年08月20日 15:01:51   作者:aiguangyuan  
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)動(dòng)畫中的布局轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在用JS編寫動(dòng)畫的時(shí)候,經(jīng)常用會(huì)到布局轉(zhuǎn)換,即在運(yùn)動(dòng)前將相對(duì)定位轉(zhuǎn)為絕對(duì)定位,然后執(zhí)行動(dòng)畫函數(shù)。下面給大家分享一個(gè)運(yùn)用原生JS實(shí)現(xiàn)的布局轉(zhuǎn)換的Demo,效果如下:

以下是代碼實(shí)現(xiàn),歡迎大家復(fù)制粘貼及吐槽。

<!DOCTYPE html>
<html>
 
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>原生JS實(shí)現(xiàn)動(dòng)畫中的布局轉(zhuǎn)換</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
 
        #ul1 {
            width: 366px;
            margin: 0 auto;
            position: relative;
        }
 
        #ul1 li {
            list-style: none;
            width: 100px;
            height: 100px;
            background: #CCC;
            border: 1px solid black;
            float: left;
            margin: 10px;
            z-index: 1;
        }
    </style>
    <!-- 運(yùn)動(dòng)框架 -->
    <script>
        // 獲取指定樣式的值
        function getStyle(obj, attr) {
            if (obj.currentStyle) {
                return obj.currentStyle[attr];
            } else {
                return getComputedStyle(obj, false)[attr];
            }
        };
        // 運(yùn)動(dòng)函數(shù)
        function startMove(obj, json, fn) {
            clearInterval(obj.timer);
            obj.timer = setInterval(function () {
                var bStop = true;
                for (var attr in json) {
                    var iCur = 0;
                    if (attr == 'opacity') {
                        iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
                    } else {
                        iCur = parseInt(getStyle(obj, attr));
                    }
                    var iSpeed = (json[attr] - iCur) / 8;
                    iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
                    if (iCur != json[attr]) {
                        bStop = false;
                    }
                    if (attr == 'opacity') {
                        obj.style.filter = 'alpha(opacity:' + (iCur + iSpeed) + ')';
                        obj.style.opacity = (iCur + iSpeed) / 100;
                    } else {
                        obj.style[attr] = iCur + iSpeed + 'px';
                    }
                }
 
                if (bStop) {
                    clearInterval(obj.timer);
                    if (fn) {
                        fn();
                    }
                }
            }, 30)
        }
    </script>
    <!-- 添加事件 -->
    <script>
        window.onload = function () {
            var oUl = document.getElementById('ul1');
            var aLi = oUl.getElementsByTagName('li');
            var iMinZindex = 2;
            var i = 0;
 
            // 1.布局轉(zhuǎn)換
            for (i = 0; i < aLi.length; i++) {
                //aLi[i].innerHTML='left:'+aLi[i].offsetLeft+', top:'+aLi[i].offsetTop;
                aLi[i].style.left = aLi[i].offsetLeft + 'px';
                aLi[i].style.top = aLi[i].offsetTop + 'px';
            }
 
            // 必需要用兩個(gè)循環(huán)
            for (i = 0; i < aLi.length; i++) {
                aLi[i].style.position = 'absolute';
                //第一次循環(huán)中offset值已經(jīng)計(jì)算了原有的margin值,所以此處要清除
                aLi[i].style.margin = '0';
            }
 
            // 2.加事件
            for (i = 0; i < aLi.length; i++) {
 
                aLi[i].onmouseover = function () {
                    //讓當(dāng)前zIndex不斷的增加,防止堆疊
                    this.style.zIndex = iMinZindex++;
                    startMove(this, {
                        width: 200,
                        height: 200,
                        marginLeft: -50,
                        marginTop: -50
                    });
                };
 
                aLi[i].onmouseout = function () {
                    startMove(this, {
                        width: 100,
                        height: 100,
                        marginLeft: 0,
                        marginTop: 0
                    });
                };
            }
        };
    </script>
 
</head>
 
<body>
    <ul id="ul1">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
 
</html>

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript實(shí)現(xiàn)下班倒計(jì)時(shí)效果的方法(可桌面通知)

    javascript實(shí)現(xiàn)下班倒計(jì)時(shí)效果的方法(可桌面通知)

    這篇文章主要介紹了javascript實(shí)現(xiàn)下班倒計(jì)時(shí)效果的方法,涉及javascript倒計(jì)時(shí)效果及桌面提示效果的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值
    2015-07-07
  • js 通用訂單代碼

    js 通用訂單代碼

    對(duì)于訂單,想必大家并不陌生吧,下為大家介紹下使用js實(shí)現(xiàn)的訂單,感興趣的朋友可以參考下
    2013-12-12
  • javascript 精確獲取樣式屬性(下)

    javascript 精確獲取樣式屬性(下)

    繼續(xù)上一部分,我們要看一下顏色。火狐好像不管三七二十一都會(huì)轉(zhuǎn)變?yōu)閞gb格式,不過我們通常比較習(xí)慣的是hex格式。這就用到以下兩函數(shù)。
    2010-01-01
  • 簡單的JS輪播圖代碼

    簡單的JS輪播圖代碼

    這篇文章主要介紹了簡單的JS輪播圖實(shí)現(xiàn)方法,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • javascript實(shí)現(xiàn)列表切換效果

    javascript實(shí)現(xiàn)列表切換效果

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)列表切換效果的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 基于javascript實(shí)現(xiàn)全屏漂浮廣告

    基于javascript實(shí)現(xiàn)全屏漂浮廣告

    這篇文章主要介紹了基于javascript實(shí)現(xiàn)全屏漂浮廣告,光標(biāo)懸浮廣告停止移動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • javascript 節(jié)點(diǎn)排序?qū)崿F(xiàn)代碼

    javascript 節(jié)點(diǎn)排序?qū)崿F(xiàn)代碼

    為了讓自定義選擇選擇出的節(jié)點(diǎn)集合盡可能接近原生API選出的結(jié)果,我們往往要對(duì)結(jié)果集進(jìn)行排序,此順序當(dāng)然是從上到下,從左到右的DOM樹順序。
    2011-01-01
  • JavaScript閉包函數(shù)訪問外部變量的方法

    JavaScript閉包函數(shù)訪問外部變量的方法

    這篇文章主要介紹了JavaScript閉包函數(shù)訪問外部變量的方法,本文使用匿名函數(shù)來實(shí)現(xiàn)在閉包中訪問外部變量,需要的朋友可以參考下
    2014-08-08
  • JS操作字符串的一些常見內(nèi)置方法

    JS操作字符串的一些常見內(nèi)置方法

    這篇文章主要給大家介紹了關(guān)于JS操作字符串的一些常見內(nèi)置方法,JavaScript中有許多常用的數(shù)組和字符串操作函數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • javascript中注冊(cè)和移除事件的4種方式

    javascript中注冊(cè)和移除事件的4種方式

    對(duì)于html中的一些元素注冊(cè)事件的方式有多種,接下來將為大家詳細(xì)介紹下,大家可以測(cè)試并對(duì)比下根據(jù)自己的習(xí)慣使用哪一種方式
    2013-03-03

最新評(píng)論

恩平市| 泗阳县| 呼图壁县| 正定县| 东莞市| 年辖:市辖区| 博爱县| 三亚市| 左云县| 彩票| 武清区| 丰镇市| 平谷区| 永寿县| 神农架林区| 特克斯县| 蚌埠市| 古浪县| 牟定县| 清原| 仁怀市| 洱源县| 西乌珠穆沁旗| 乌苏市| 山阴县| 蒙阴县| 玉林市| 措勤县| 通渭县| 阿荣旗| 平顶山市| 竹山县| 马边| 平凉市| 加查县| 扎兰屯市| 东兰县| 元江| 丰顺县| 甘南县| 德兴市|