canvas-a11htmlANDcanvas.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
    #canvas-wrapper{
        width: 1200px;
        height: 800px;
        position: relative;
        margin:50px auto;
    }
    #canvas{
        border: 1px #ddd solid;
    }
    #controller{
        position: absolute;
        top:30px;
        left:30px;
        background:rgba(0,85,116,0.7);
        padding:5px 20px 25px 20px;
        border-radius: 10px 10px;
    }
    #controller h1{
        color: white;
        font-weight: bold;
        font-family: "Microsoft Yahei";
    }
    #controller #canvas-btn{
        display: inline-block;
        background: #8b0;
        color: white;
        font-size: 14px;
        padding: 5px 15px;
    }
    #controller #canvas-btn:hover{
        text-decoration: none;
        background:#7a0;
    }
    #controller .color-btn{
        display: inline-block;
        padding:5px 15px;
        border-radius: 6px 6px;
        font-size: 14px;
        margin-top: 10px;
        margin-right: 5px;
        text-decoration: none;
    }
    #controller .color-btn:hover{
        text-decoration: none;
    }
    #controller #white-color-btn{
        background-color: white;
    }
    #controller #black-color-btn{
        background-color: black;
    }
</style>
<body>
    <div id="canvas-wrapper">
        <canvas id="canvas">
            当前游览器不支持Canvas,请更换游览器再试!
        </canvas>
        <div id="controller">
            <h1>Canvas 绘图之旅</h1>
            <a href="#" id="canvas-btn">stop</a>
            <a href="#" class="color-btn" id="white-color-btn">white</a>
            <a href="#" class="color-btn" id="black-color-btn">black</a>
        </div>
    </div>

    <script>
        var balls = [];
        var isMoving = true;
        var themeColor = "white";
        var canvas = document.getElementById("canvas");

        window.onload = function(){

            canvas.width = 1200;
            canvas.height = 800;

            if(canvas.getContext(‘2d‘)){
                var context = canvas.getContext(‘2d‘);

                // 产生100个小球
                for(var i=0;i<100;i++){
                    var R = Math.floor(Math.random()*255);
                    var G = Math.floor(Math.random()*255);
                    var B = Math.floor(Math.random()*255);
                    var radius = Math.random()*50+20;

                    aBall = {
                        color : "rgb(" + R + "," + G + "," + B + ")",
                        radius : radius,
                        x : Math.random()*(canvas.width-2*radius) + radius,
                        y : Math.random()*(canvas.height-2*radius) + radius,
                        vx : (Math.random()*5 + 5) * Math.pow(-1,Math.floor(Math.random()*100)),
                        vy : (Math.random()*5 + 5) * Math.pow(-1,Math.floor(Math.random()*100)),
                    }

                    balls[i] = aBall;
                }

                // 绘制并运动
                setInterval(function(){
                    draw(context);
                    if(isMoving){
                        update(canvas.width,canvas.height)
                    }
                },50)

                // stop
                document.getElementById("canvas-btn").onclick = function(event){
                    if(isMoving){
                        isMoving = false;
                        this.text = "start";
                    }else{
                        isMoving = true;
                        this.text = "stop";
                    }
                    return false;
                } 

                // white
                document.getElementById("white-color-btn").onclick = function(event){
                    themeColor = "white";
                    return false;
                }

                // black
                document.getElementById("black-color-btn").onclick = function(event){
                    themeColor = "black";
                    return false;
                }
            }else{
                alert("当前游览器不支持Canvas,请更换游览器再试!")
            }
        }

        function draw(cxt){
            // var canvas = cxt.canvas;
            cxt.clearRect(0,0,canvas.width,canvas.height);

            if(themeColor == "black"){
                console.log("black theme");
                cxt.fillStyle = "black";
                cxt.fillRect(0,0,canvas.width,canvas.height)
            }

            for(var i=0;i<balls.length;i++){
                cxt.fillStyle = balls[i].color;
                cxt.beginPath();
                    cxt.arc(balls[i].x,balls[i].y,balls[i].radius,0,Math.PI*2);
                cxt.closePath();
                cxt.fill();
            }
        }

        function update(){
            for(var i=0;i<balls.length;i++){
                balls[i].x += balls[i].vx;
                balls[i].y += balls[i].vy;

                // 边缘检测
                if(balls[i].x - balls[i].radius <= 0){
                    balls[i].vx = -balls[i].vx;
                    balls[i].x = balls[i].radius;
                }

                if(balls[i].x + balls[i].radius >= canvas.width){
                    balls[i].vx = -balls[i].vx;
                    balls[i].x = canvas.width - balls[i].radius;
                }

                if(balls[i].y - balls[i].radius <= 0){
                    balls[i].vy = -balls[i].vy;
                    balls[i].y = balls[i].radius;
                }

                if(balls[i].y + balls[i].radius >= canvas.height){
                    balls[i].vy = -balls[i].vy;
                    balls[i].y = canvas.height - balls[i].radius;
                }
            }
        }
    </script>
</body>
</html>
时间: 2024-08-24 13:26:41

canvas-a11htmlANDcanvas.html的相关文章

HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签原型 <canvas width=”1000” height=”1000” id=”myCanvas”> 您的浏览器版本过低,不支持HTML5新增的canvas标签. </canvas> 使用js获取该画布,并指定对象 <script> Var canvasID = doc

移动端canvas抗锯齿

未抗锯齿效果图: 加入抗锯齿代码效果: var Game = function(){ var H = document.documentElement.clientHeight || document.body.clientHeight; var W = document.documentElement.clientWidth || document.body.clientWidth; this.canvas = document.getElementById("canvas"); t

Canvas

仿百度贴吧客户端 loading 小球 前言 几天前在简书上看到在一篇文章<Android仿百度贴吧客户端Loading小球>,看了一下作者,他写了两个好玩的 demo,效果图如下: 今天趁着周末有空,用 H5 的 Canvas 仿了一下.这篇文章只实现第一个效果图.这是我实现的效果: 实现原理 实现原理是参考简书的那篇文章,这里不再复述.现在我们来一步一步实现这样的效果. 第零步:画一个圆 源码如下: <!DOCTYPE html> <html> <head&g

canvas设置width, height

在style里面设置canvas的宽高时,会发现画出的图像被拉伸了:在canvas元素中直接设置width和height就会恢复正常:如果在canvas元素里的style里设置width和height会发现又不行了!看了chy龙神 的博客发现了其中玄机.. 首先这是由canvas的构造导致的,canvas是一个画板和一张画纸组成的.当画板和画纸尺寸一致时,不会发生拉伸变形的情况:当画板和画纸尺寸不一致时,就会被拉伸变形. 能正确设置画板和画纸宽高一致的方法,这些方法可以同时设置画板和画纸的宽高:

【铜】第131篇 融合一对一canvas视频录制到备份上(二)简版做成及追加图片过程周四

关键词:一对一canvas视频录制, 简版做成,追加图片过程 一.一对一视频录制 1.1 往备份上布录制-----------------bug处理 现在不知道,网页录制都依赖哪些文件,现在需要一个一个的去除.现在去除差不多了,如下: 经过整理发现,仅仅需要两个文件,就能实现录制.如下: 简版访问地址如下: http://localhost:9001/record-canvas-drawings.html#no-back-button 二.追加图片过程 2.1 学生端追加拍照 <li><

HTML5 Canvas ( 图形的像素操作 ) getImageData, putImageData, ImgData.data

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">

HTML5 Canvas 图像动画的实现(实例小球弹跳)

Canvas 中 clearRect 清除函数 var c=document.getElementById("php100"); var p100=c.getContext("2d"); p100.clearRect(x,y,x,y) // 擦除画布一个区域x-y.x-y ------ 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <

canvas制作倒计时炫丽效果

<!DOCTYPE html> <head> <title>canvas倒计时</title> <style> .canvas{ display: block; border: 1px solid #000; margin: 50px auto; } </style> </head> <body> <canvas class="canvas" id="canvas"

用微信小程序开发的Canvas绘制可配置的转盘抽奖

使用https://github.com/givebest/GB-canvas-turntable代码移植过而来. 其它 微信小程序感觉是个半成品,代码移植过程比较繁琐麻烦.canvas API 部分都被重写了...canvas z-index不生效,永远在最上层,不支持rotate动画. 更多:点击打开链接

用canvas绘制折线图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用canvas绘制折线图</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 </body> 1