javascript - getComputedStyle会对dom元素的各个属性进行更新检查吗

查看:70
本文介绍了javascript - getComputedStyle会对dom元素的各个属性进行更新检查吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在实现图片轮播的时候,加上了一句 window.getComputedStyle(ul, false)['left'];
效果就好了,可是没有用变量去保存,就只是单单执行了这句话,如果去掉的话,对元素left的修改就无效了。
求巨巨们解答。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * { margin: 0;padding: 0;}
    .container { width: 375px; height: 140px; overflow: hidden; }
    ul { list-style-type: none; position: relative; width: 7500px; height: 140px;      left: -375px;}
    .anima { transition: all 1s;}
    li { width: 375px; height: 100%; float: left; display: inline-block; }
    img { width: 100%; height: 100%;}
    </style>
    <script type="text/javascript">
     window.onload = function () {
        var animate = (function (offset) {
            var index = 2;
            var ul = document.querySelectorAll('ul')[0];
            var liList = document.querySelectorAll('li');

            var move = function (obj, width) {
                var left = parseInt(window.getComputedStyle(obj, false)['left']);
                obj.style.left = left + width + 'px';
            }
            return function () {
                window.getComputedStyle(ul, false)['left']; // 这里,注释掉效果就错了
                if (index == 5) {
                    index = 1;
                    ul.className = '';
                    ul.style.left = '-375px';
                    // ul.setAttribute('style','left:-375px');
                    setTimeout(function () {
                        animate();
                    }, 0);
                }
                else {
                    ul.className = 'anima';
                    move(ul, offset);
                     setTimeout(() => {
                        animate();
                    }, 1000);
                }
                index++;
            }
        })(-375);
        setTimeout(() => {
            animate();
        }, 1000);
    }
    </script>
</head>

<body>
    <div class="container">
        <ul class="anima">
            <li>
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1484559844848&di=8e19e9093abaddb49aff0c85aba6e946&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F3b87e950352ac65c1b6a0042f9f2b21193138a97.jpg">
            </li>
            <!-- 图片列表多放了两张图片,列表的第一张是正常列表的最后一张,列表的最后一张是正常列表的第一张 -->
            <li>
                <img src="https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1484549759&di=f0caf19a1954708bef443ca548e3c2f0&src=http://img002.21cnimg.com/photos/album/20160326/m600/B920004B5414AE4C7D6F2BAB2966491E.jpeg">
            </li>
            <li>
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1484559844849&di=e1d85e28674f88ae2b6258f04696b0ac&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Flvpics%2Fh%3D800%2Fsign%3D9931b79f1dd5ad6eb5f969eab1ca39a3%2Fa8773912b31bb051b3333f73307adab44aede052.jpg">
            </li>
            <li>
                <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1484559844848&di=8e19e9093abaddb49aff0c85aba6e946&imgtype=0&src=http%3A%2F%2Fd.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F3b87e950352ac65c1b6a0042f9f2b21193138a97.jpg">
            </li>
            <li>
                <img src="https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1484549759&di=f0caf19a1954708bef443ca548e3c2f0&src=http://img002.21cnimg.com/photos/album/20160326/m600/B920004B5414AE4C7D6F2BAB2966491E.jpeg">
            </li>
        </ul>
    </div>
</body>
</html>

解决方案

因为 window.getComputedStyle(ul, false)['left']; 会引起reflow,还有很多可以引起reflow的方式,只要加上都是可以的。

这篇关于javascript - getComputedStyle会对dom元素的各个属性进行更新检查吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆