zoukankan      html  css  js  c++  java
  • requestAnimationFrame 兼容方案

    编写涉及:css, html, js

    在线演示codepen

    html代码

    <div class="roll-box">
        <div class="inner-box">move</div>
    </div>
    
    <button onclick="startMove()"> start move</button>
    

    css代码

    .roll-box {
        position: relative;
         600px;
        height: 400px;
        background: #007acc;
        overflow: hidden;
        color: #fff;
    }
    .inner-box {
        position: absolute;
        top: 10px;
        left: 0;
         50px;
        height: 50px;
        text-align: center;
        line-height: 50px;
        background-color: rgb(245, 152, 30);
    }
    button{
        margin-top: 20px;
        padding: 6px 10px;
        border: 0;
        color: #fff;
        background-color: rgb(39, 133, 240);
    }
    

    JavaScript代码

    let moveCount = 0;
    let rafId = '';
    const ele = document.querySelector('.inner-box');
    
    window.requestAniFrame = (function () {
        return window.requestAnimationFrame
    
            // Older versions Chrome/Webkit
            window.webkitRequestAnimationFrame ||
    
            // Firefox < 23
            window.mozRequestAnimationFrame ||
    
            // opera
            window.oRequestAnimationFrame ||
    
            // ie
            window.msRequestAnimationFrame ||
    
            function (callback) {
                return window.setTimeout(callback, 1000 / 60);
            };
    })()
    
    window.cancelAnimation = (function () {
        return window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.cancelRequestAnimationFrame || function (id) { clearTimeout(id) }
    })()
    
    function moveFn() {
        ele.setAttribute('style', 'left:' + moveCount + 'px');
        moveCount++
    
        if (moveCount > 550) {
            window.cancelAnimation(rafId)
        } else {
            rafId = window.requestAniFrame(moveFn)
        }
    }
    
    function startMove() {
        // 必须先清除,否者多次点击会生成多个动画帧,导致元素移动速度加快
        window.cancelAnimation(rafId)
        rafId = window.requestAniFrame(moveFn)
    }
    

    若有疑问或错误,请留言,谢谢!Github blog issues

  • 相关阅读:
    【搜索结果】高亮显示
    【搜索面板】排序单选
    【搜索面板】价格信息单选
    根据接口返回的数据重组数组
    Array.from
    获取指定字符串第n次出现的位置索引
    Object
    验证码倒计时
    iview Form表单正则验证
    网络图片转base64格式
  • 原文地址:https://www.cnblogs.com/he-wei/p/10297848.html
Copyright © 2011-2022 走看看