javascript - JS动画效果,制作一个滚动变大的圆。
黄舟
黄舟 2017-04-11 13:11:50
[JavaScript讨论组]

1.制作一个滚动的金币,随着页面加载,完成一个两个过程的动画,第一步逐渐旋转变大,到达第一个位置后,留下一个动画留影,第二步继续移动,到达第二个位置后,留下一个动画留影,结束动画。
2.我尝试过使用定时器,判定定位的left来进行留影,但是效果并不好,没有流畅感,而且无法解决,逐渐旋转变大的特效。
3.截图

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(6)
天蓬老师

试试这个@keyframes,这个是菜鸟教程的地址
例子如下,和他差不多吧

@keyframes myfirst
{
0%   {background: red; left:0px; top:0px;}
25%  {background: yellow; left:200px; top:0px;}
50%  {background: blue; left:200px; top:200px;}
75%  {background: green; left:0px; top:200px;}
100% {background: red; left:0px; top:0px;}
}

@-webkit-keyframes myfirst /* Safari and Chrome */
{
0%   {background: red; left:0px; top:0px;}
25%  {background: yellow; left:200px; top:0px;}
50%  {background: blue; left:200px; top:200px;}
75%  {background: green; left:0px; top:200px;}
100% {background: red; left:0px; top:0px;}
}
天蓬老师

为啥不试试css3的动画呢

伊谢尔伦

除了css3 和flash,请问还有更好的方案吗?js动画,存在大量的CPU运算和GPU,从运算开始,到每一帧的动画展示,这其中都有一个时间差,所以采用纯js的方案,肯定是不行的。推荐采用css3+js来做,另外可以搜索下关于提高css3动画流畅度的博文(非常多)

PHP中文网
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<img src="img/00.jpg" id="img" alt="">

<script>
function img(){
    var _img = document.getElementById("img");
    _img.style.width = "100px";
    _img.style.height = "100px";
    setTimeout("obj()",1000)
}

function obj(){
    var _img = document.getElementById("img");
    var _img_w = parseInt(_img.style.width);
    var _img_h = parseInt(_img.style.height);
    if (_img_w < 200) {
        _img_w++
    }
    if (_img_h < 200) {
        _img_h++
    }
    _img.style.width = _img_w + "px";
    _img.style.height = _img_h + "px";
    setTimeout("obj()",500)
}
img()


</script>
</body>
</html>

不知道这样对不对 新手~

大家讲道理
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #jinbi{
            width:60px;
            height:60px;
            background:gold;
            border-radius:50%;
            text-align:center;
            line-height: 60px;
            font-size:30px;
            font-weight:bold;
            position:absolute;
            left:10px;
            top:100px;
        }
        #jinbi-1{
            width:80px;
            height:80px;
            background:red;
            border-radius:50%;
            text-align:center;
            line-height: 80px;
            font-size:50px;
            font-weight:bold;
            position:absolute;
            left:94px;
            top:100px;
            transform:rotate(21deg);
            display:none;
        }
    </style>
</head>
<body>
    <p id="jinbi">
        ¥
    </p>
    <!-- 另外两个金币,先隐藏 -->
    <p id="jinbi-1">¥</p>
    <script src="lib/js/jquery.js"></script>
    <script>
        $(function(){

            var widthNum = $("#jinbi").width();//金币宽度
            var heightNum = $("#jinbi").height();//金币高度
            var leftNum = 10;//left值
            var topNum = 100;//top值
            var rotateNum = 0;//旋转角度
            function change(){


                //判断
                if(widthNum == 80){
                    //显示备用金币
                    $("#jinbi-1").css("display","block");

                }
                if(widthNum == 130){
                    clearInterval(countTime);
                }
                widthNum ++;
                heightNum ++;
                fontNum  = widthNum/2;
                leftNum +=4;
                //保证圆心在同一水平线
                
                topNum = 100-(heightNum - 60)/2; 

                rotateNum ++;

                $('#jinbi').css({
                    "width":widthNum+"px",
                    "height":heightNum+"px",
                    "font-size":fontNum+"px",
                    "line-height":widthNum+"px",
                    "left":leftNum + "px",
                    "top":topNum +"px",
                    "transform":"rotate("+ rotateNum +"deg)"
                });
            }
            // change();
            var countTime = setInterval(function(){
                change();

            },50)
        })
    </script>    
</body>
</html>

我用jquery写的,你看看!!!

ringa_lee

就这点效果用js实现有什么不流畅的。说下思路,一个代码处理canvas里旋转并放大的动画,另外一个代码移动canvas这个DOM的位置,到达指定位置后,将canvas的内容保存为一张图片(执行toDataURL方法),然后清除canvas内容,重新进行第一步。不要用setTimeout,用requestAnimationFrame这个方法。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号