canvas之----浮动小球

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<style>
#canvas { border:solid 1px #ccc;}

</style>
<body>

<div id="controls">
    <input id=‘animateButton‘ type="button" value="Animate"/>
</div>
<canvas id="canvas" width="750" height="500">Conot</canvas>

<script>
var canvas = document.getElementById("canvas"),context = canvas.getContext("2d"),paused =true ,

discs = [
{x:150,y:250,lastX:150,lastY:250,velocityX:-3.2,velocityY:1.5,radius:25,innerColor:"rgba(255,255,255,0.5)",middleColor:"rgba(255,255,255,0.7)",outerColor:"rgba(255,255,0,0.5)",strokeStyle:"gray",}
,{x:250,y:150,lastX:150,lastY:250,velocityX:-2.2,velocityY:3.5,radius:25,innerColor:"rgba(255,255,255,0.3)",middleColor:"rgba(255,255,255,0.7)",outerColor:"rgba(255,255,0,0.5)",strokeStyle:"gray",},
{x:350,y:350,lastX:150,lastY:250,velocityX:-1.2,velocityY:3.5,radius:25,innerColor:"rgba(255,255,255,0.8)",middleColor:"rgba(255,255,255,0.3)",outerColor:"rgba(255,128,0,0.5)",strokeStyle:"gray",},
], numDiscs = discs.length,animateButton = document.getElementById("animateButton");

function update(){
    var disc = null;
    for(var i=0;i<numDiscs;++i){
        disc = discs[i];
        if(disc.x + disc.velocityX + disc.radius> context.canvas.width || disc.x +disc.velocityX - disc.radius <0)
        disc.velocityX = -disc.velocityX ;

        if(disc.y +disc.velocityY +disc.radius > context.canvas.height || disc.y + disc.velocityY - disc.radius <0)
        disc.velocityY = -disc.velocityY;
        disc.x += disc.velocityX;
        disc.y += disc.velocityY;

        }

    }
function draw(){
    var disc = discs[i];

    for (var i=0;i<numDiscs;++i){
        disc  = discs[i];
        gradient = context.createRadialGradient(disc.x,disc.y,0,disc.x,disc.y,disc.radius);
        gradient.addColorStop(0.3,disc.innerColor);
        gradient.addColorStop(0.5,disc.middleColor);
        gradient.addColorStop(1,disc.outerColor);
        context.save();
        context.beginPath();
        context.arc(disc.x,disc.y,disc.radius,0,Math.PI*2,false);
        context.fillStyle = gradient;
        context.strokeStyle = disc.strokeStyle;
        context.fill();
        context.stroke();
        context.restore();

        }

}
function animate(time){

    if(!paused){
        context.clearRect(0,0,canvas.width,canvas.height);
        //drawBackground();
        update();
        draw();

        window.requestNextAnimationFrame(animate);
        }
}

animateButton.onclick =function (e){
    paused = paused?false :true ;
    if(paused){
        animateButton.value = "Animate";
    }
    else {
        window.requestNextAnimationFrame(animate);
        animateButton.value ="Pause";
        }
    }

context.font = "48px Helvetica";

window.requestNextAnimationFrame = (function(){
    var originalWebkitMethod, wrapper = undefined,callback = undefined,
    geckoVersion = 0 , userAgent = navigator.userAgent, index =0 , self =this;

    if(window.webkitRequestAnimationFrame){

        wrapper = function (time){

            if(time === undefined ){

                time = +new Date();
                }
                self.callback(time);
            };

        originalWebkitMethod = window.webkitRequestAnimationFrame;

        window.webkitRequestAnimationFrame = function (callback,element){
            self.callback = callback ;
            originalWebkitMethod(wrapper,element);

            }

        }
    if(window.mozRequestAnimationFrame){
        index = userAgent.indexOf("rv:");
        if(userAgent.indexOf("GecKo") != -1){
            geckoVersion = userAgent.substr(index +3 ,3);
            if(geckoVersion ==="2.0"){
                window.mozRequestAnimationFrame = undefined ;
                }

            }
        }
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||window.msRequestAnimationFrame || function (callback,element){
        var start,finish;
        window.setTimeout(function(){
            start = +new Date();
            callback(start);
            finish = +new Date();

            self.timeout = 1000/60 - (finish -start);

            },self.timeout);

        }

    })()

</script>

</body>
</html>

学习 canvas 核心技术 做的一个 效果。

canvas之----浮动小球,布布扣,bubuko.com

时间: 2024-10-20 01:13:14

canvas之----浮动小球的相关文章

用Xamarin 实现园友的 :Android浮动小球与开机自启动

原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动  , 感觉这种被 360 玩烂的功能原来是如此的简单啊... 我不会 Java, 当然也不懂如何 用 ADT 开发 Android App. 但是我看过几天 Xamarin 啊,C# 我还是会的.. 用 Xamarin 做Android , 只要对着 java 源码, 我还是能翻译一份出来的. 我第一时间安装了 VS2015 , 挺好的,自带的 Android

Android浮动小球与开机自启动

看着手机上的360浮动小球,不评价其具体的功能与实用性,至少在UI设计与交互方面是个不小的创新. 如图片左上角所示,球中还会显示当前手机的运行状况,向下拉动还会有弹射来达到加速.清理等目的. 那好,先来实现一个类似的小球(仅限于形状,功能你懂得). 查阅了相关资料,整个界面除了小球以外,其他部分均是做透明处理. 1.由于用到了CompatModeWrapper,所以需要在AndroidManifest.xml中添加以下权限: 1 <uses-permission android:name="

canvas绘制弹跳小球

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

第七讲:HTML5中的canvas两个小球全然弹性碰撞

<html> <head> <title>小球之间的碰撞(全然弹性碰撞)</title> <script src="../js/jscex.jscexRequire.min.js" type="text/javascript"></script> </head> <body> <canvas id="mc" width="1200px&

HTML5 Canvas绚丽的小球详解

实例说明: 实例使用HTML5+CSS+JavaScript实现小球的运动效果 掌握Canvas的基本用法 技术要点: 从需求出发 分析Demo要实现的功能 擅于使用HTML5 Canvas 参考手册 主要分为两个部分: 静态布局:小球的设计,包括小球的位置.颜色.大小和大小变化情况等,初始化小球的函数,渲染函数,Update函数 动态主体:变量.数组的的定义,小球显示时长定时,鼠标移动触发小球运动的函数 代码部分: canvas标签,提供绘图的画布 js逻辑:静态小球 其中,_init()函数

JS (canvas) 两个小球碰撞

<style media="screen"> * { margin: 0; padding: 0; } canvas { box-shadow: 0 0 40px black; margin: 50px; } </style> <canvas id="canvas" width="500" height="500">您的浏览器不支持canvas</canvas> <scri

用Canvas制作剪纸效果

在做剪纸效果之前,先介绍剪纸效果运用到的一些知识: 1.阴影: 在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影效果: shadowColor:CSS格式的颜色字串.默认值为rgba(0,0,0,0),即完全透明的黑色. shadowOffsetX:阴影在X轴方向的偏移量,以像素为单位.默认值为0 shadowOffsetY:阴影在Y轴方向的偏移量,以像素为单位.默认值为0 shadowBlur:表示阴影效果如何延伸的double值.默认值为0.该值用于高斯模糊方程

Canvas 实现七彩喷泉

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>小球 喷泉运动</title> <meta name="Keywords" content="关键词1,关键词2"> <met

html5 方框内的小球

版本一 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="js/jquery.js"></script> <script> $(function () { var x=10,y=10,WIDTH,HEIGHT