那些年我们一起看过的大风车!详解编程语言

 使用JS实现大风车!

  下面附上效果图:

那些年我们一起看过的大风车!详解编程语言

  最后附上源码,复制即可用:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>那年我们一起看过的大风车</title> 
<style type="text/css"> 
#box{  
    border:2px solid #f60; width:800px; height:600px; margin:0 auto; 
} 
</style> 
<script type="text/javascript"> 
    var canvas,context;//画布、上下文 
    var X,Y;//风车的圆心X坐标、Y坐标 
    var canvasWidth,canvasHeight;//画布的宽高 
    var speed = 1;//风车的转速、默认为1 
    var R = 10;//风车的半径 
 
    //初始化页面函数 
    function init(){ 
        initCanvas(); 
        initParams(); 
        draw(); 
        setInterval(draw,20); 
    } 
     
    //初始化画布宽高、风车圆心坐标 
    function initParams(){ 
        canvasWidth = canvas.width; 
        canvasHeight = canvas.height; 
        X = canvasWidth/2; 
        Y = canvasHeight/4; 
    } 
    
    //设置风的大小 
    function setSpeed(speed){ 
        this.speed = speed; 
    } 
    
    //设置风的大小 
    function setR(R){ 
        this.R = R; 
    } 
     
    //初始化画布 
    function initCanvas(){ 
        try{ 
        canvas = document.getElementById("windmill"); 
        context = canvas.getContext("2d"); 
        }catch(e){ 
            document.getElementById("tip_info").innerHTML = "您的浏览器不支持!"; 
        } 
    } 
 
    //绘制半圆 
    function drawArc(tangle, style){ 
         context.beginPath(); 
         var trunkGradient = context.createLinearGradient(X, Y, X, Y+4*R); 
         trunkGradient.addColorStop(0, style); 
         trunkGradient.addColorStop(1, '#FFF00F'); 
         context.fillStyle = trunkGradient; 
          
        context.arc(X - (2*R*Math.cos(tangle)), Y - 2*R*Math.sin(tangle), 2*R, tangle, Math.PI+tangle, true); 
        context.closePath(); 
        context.fill(); 
        context.save(); 
    } 
 
    //绘制手把柄 
    function drawHandle(){ 
         var trunkGradient = context.createLinearGradient(X, Y, X+10, Y); 
         trunkGradient.addColorStop(0, '#663300'); 
         trunkGradient.addColorStop(0.4, '#996600'); 
         trunkGradient.addColorStop(1, '#552200'); 
         context.fillStyle = trunkGradient; 
         context.fillRect(X, Y, 0.2*R, 8*R); 
    } 
 
    //绘制文字 
    function drawText(){ 
         context.font = "30px 宋体 bold"; 
         context.textAlign = 'center'; 
         context.fillText('那些年我们一起看过的大风车!', X, canvasWidth - 300, 300); 
    } 
 
    //绘制函数 
    var tangle = 0; 
    function draw(){ 
        tangle = tangle + (speed*1/32)*Math.PI; 
        context.clearRect(0,0,canvasWidth,canvasHeight); 
        drawHandle(); 
        drawText(); 
        drawArc(tangle,"#552200"); 
        drawArc(tangle+1/2*Math.PI, "#990000"); 
        drawArc(tangle+Math.PI, "#0033FF"); 
        drawArc(tangle+3/2*Math.PI, "#225500"); 
        document.getElementById("tip_info").innerHTML = "转动角度:"+parseInt(tangle)+"    当前的风速:"+speed; 
    } 
    window.addEventListener("load",init,true); 
</script> 
</head> 
<body> 
    <div id="box"> 
        <canvas id = "windmill" style = "background-color:#001111" width = "800px" height = "600px"></canvas> 
        <div id = "tip_info"></div> 
        <div> 
            <button onClick="setSpeed(0)">停止</button> 
            <button onClick="setSpeed(0.1)">微风</button> 
            <button onClick="setSpeed(0.5)">小风</button> 
            <button onClick="setSpeed(1)">中风</button> 
            <button  onClick="setSpeed(2)">大风</button> 
            <button  onClick="setSpeed(4)">狂风</button> 
            | 
            <button onClick="setR(5)">小号</button> 
            <button onClick="setR(20)">中号</button> 
            <button onClick="setR(30)">大号</button> 
            <button onClick="setR(35)">超大号</button> 
        </div> 
    </div> 
</body> 
</html>

 如果有错误的地方,请联系我改正!谢谢!!!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12336.html

(0)
上一篇 2021年7月19日 14:34
下一篇 2021年7月19日 14:34

相关推荐

发表回复

登录后才能评论