zoukankan      html  css  js  c++  java
  • htm5实现视差动画

    requestAnimationFrame.js   

    1 window.requestAnimFrame = (function() {
    2                 return window.requestAnimationFrame ||
    3                     window.webkitRequestAnimationFrame ||
    4                     window.mozRequestAnimationFrame ||
    5                     window.oRequestAnimationFrame ||
    6                     window.msRequestAnimationFrame || function( /* function */ callback, /* DOMElement */ element) {
    7                     window.setTimeout(callback, 1000 / 60);
    8                 };
    9             })();

     页面主要代码:

      1 <!DOCTYPE HTML>
      2 <html>
      3     
      4     <head>
      5         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      6         <title>视差动画</title>
      7         <script type="text/javascript" src="js/jquery8.js"></script>
      8         <script type="text/javascript" src="js/requestAnimationFrame.js"></script>
      9         <style type="text/css">
     10             body {
     11                 background:#dddddd;
     12             }
     13             #control {
     14                 width:1000px;
     15                 margin:0 auto;
     16             }
     17             #containter {
     18                 text-align:center;
     19             }
     20             
     21             #canavas {
     22                 margin:10px;
     23                 padding:10px;
     24                 background:#ffffff;
     25                 border:thin #aaaaaa;
     26             }
     27         </style>
     28         <script type="text/javascript">
     29 
     30             $(function() {
     31 
     32                 canvas = jQuery("#canavas")[0];
     33                 content = canvas.getContext("2d");
     34                 
     35                 //天空背景
     36                 sky = new Image();
     37                 sky.src = "image/back.jpg";
     38 
     39                 //云朵
     40                 c1 = new Image();
     41                 c1.src = "image/cloud2.png";
     42 
     43                 c2 = new Image();
     44                 c2.src = "image/cloud1.jpg";
     45 
     46                 c3 = new Image();
     47                 c3.src = "image/cloud3.jpg";
     48                 
     49                 lastTime = (+new Date())
     50                 requestAnimFrame(animate);
     51                 
     52                 pause=false;
     53                 $("#b1").click(function(){
     54                 
     55                  pause=!pause;
     56                 
     57                 });
     58 
     59             });
     60             //获取随机数据
     61             function getRandom(min, max) {
     62 
     63                 return parseInt(Math.random() * (max - min) + min);
     64 
     65             }
     66 
     67 
     68 
     69             SKY_VELOCITY = 50;
     70             skyOffset = 0;
     71 
     72             C1_VELOCITY = 100;
     73             c1Offset = 0;
     74 
     75             C2_VELOCITY = 150;
     76             c2Offset = 0;
     77 
     78             C3_VELOCITY = 200;
     79             c3Offset = 0;
     80 
     81             fangxiag = 1;
     82 
     83             function drawBack() {
     84                 
     85                 //背景移位
     86                 skyOffset = skyOffset < sky.width ? skyOffset + SKY_VELOCITY / fps : 0;
     87                 
     88                 //远/中/近 三处的云朵移位
     89                 c1Offset = c1Offset < canvas.width ? c1Offset + C1_VELOCITY / fps : 0;
     90                 c2Offset = c2Offset < canvas.width ? c2Offset + C2_VELOCITY / fps : 0;
     91                 c3Offset = c3Offset < canvas.width ? c3Offset + C3_VELOCITY / fps : 0;
     92 
     93                 //绘制三朵云
     94                 content.save();
     95                 content.translate(-skyOffset, 0);
     96                 content.drawImage(sky, 0, 0);
     97                 content.drawImage(sky, sky.width, 0);
     98                 content.restore();
     99 
    100                 content.save();
    101                 content.translate(-c1Offset, 0);
    102                 content.drawImage(c1, 50, 50);
    103                 content.drawImage(c1, 600, 70);
    104                 content.drawImage(c1, 1050, 50);
    105                 content.drawImage(c1, 1600, 70);
    106                 content.restore();
    107 
    108                 content.save();
    109                 content.translate(-c2Offset, 0);
    110                 content.drawImage(c2, 130, 120);
    111                 content.drawImage(c2, 730, 170);
    112                 content.drawImage(c2, 1130, 120);
    113                 content.drawImage(c2, 1730, 170);
    114                 content.restore();
    115 
    116                 content.save();
    117                 content.translate(-c3Offset, 0);
    118                 content.drawImage(c3, 600, 250);
    119                 content.drawImage(c3, 100, 320);
    120                 content.drawImage(c3, 1600, 250);
    121                 content.drawImage(c3, 110, 320);
    122                 content.restore();
    123 
    124             }
    125 
    126 
    127             fps = 0;
    128             //实现动画
    129             function animate(time) {
    130                 
    131                 if(!pause){
    132                 
    133                //清楚背景
    134                 content.clearRect(0, 0, canvas.width, canvas.height);
    135                 //计算fps
    136                 fps = geFps(time);
    137 
    138                 //绘制背景
    139                 drawBack();
    140                 
    141                 //绘制即时参数
    142                 content.fillText(fps.toFixed() + " fps", 20, 20);
    143                 
    144                 }else{
    145               
    146                 lastFpsUpdateTime=time;              
    147               
    148             }
    149                 //继续下一帧动画
    150                 requestAnimFrame(animate);
    151             }
    152 
    153 
    154 
    155             var lastFpsUpdateTime = 0;
    156             //计算fps
    157             function geFps(time) {
    158 
    159                 fps = 1000 / (time - lastFpsUpdateTime);
    160 
    161                 lastFpsUpdateTime = time;
    162 
    163                 return fps;
    164 
    165             }
    166         </script>
    167     </head>
    168     
    169     <body>
    170         <div id="control">
    171             <input id="b1" type="button" value="暂停" />
    172            
    173         </div>
    174         <div id="containter">
    175             <canvas id="canavas" width="500" height="200"></canvas>
    176         </div>
    177     </body>
    178 
    179 </html>

    来看效果:

  • 相关阅读:
    简单的运动框架——分享给初学者
    Python数据分析学习日志(1. 书单)
    mysql恢复数据参考
    window cmd 杀掉 java.exe 进程
    转载: Ajax关于readyState和status的讨论
    开发问题bug记录
    vue基础part10
    vue基础part9
    vue基础part(7-8)
    vue基础part(4-6)
  • 原文地址:https://www.cnblogs.com/kyyblabla/p/3426639.html
Copyright © 2011-2022 走看看