前端Canvas学习

用js结合canvas

  • canvas是一个画布

    (canvas id="mycanvas" style="background-color: white;">(/canvas>
  • 做背景 跟浏览器等宽等高 不用css样式 100% 会变形 需要用js来设置

    var can = document.getElementById("mycanvas")
    var cnx = can.getContext("2d") //getContext() 方法返回一个用于在画布上绘图的环境。
    can.width = window.innerWidth
    can.height = window.innerHeight
  • 画圆点

    //画圆  半径小成一个点
    function Cricle(x,y){
      cnx.save()        
      cnx.fillStyle="black"                  //颜色
      cnx.beginPath()                      //开始画
      cnx.arc(x,y,1,0,2*Math.PI,true)        //圆心坐标x,y ,半径,起始角度,终止角度 ,角度,逆/顺时针
      cnx.closePath()
      cnx.fill()
    }
  • 运动 + 连线

      // 运动 + 连线
          !function draw(){ //浏览器自动运行这个匿名函数的,因为!+()这些符号的运算符是最高的,所以会先运行它们后面的函数
              cnx.clearRect(0,0,can.width,can.height)
              for(var i = 0 ; i < nums;i++){
                  //如果到了边界取反
                  if(date[i].x<0||date[i].x>can.width)date[i].cx *= -1;
                  if(date[i].y<0||date[i].y>can.height)date[i].cy *= -1;
    
                  date[i].x += date[i].cx
                  date[i].y += date[i].cy
                  Cricle(date[i].x,date[i].y)
                  // 连接相邻的星星
                  link(date[i].x, date[i].y)
              }
              setInterval(function(){
                  draw();
              },10) 
          }();
          function link(x,y){
              for (var i = 0 ; i <nums ; i++) {  //找出附近谁跟自己最近
                  var distance = Math.pow(Math.pow((x - date[i].x), 2) + Math.pow((y - date[i].y), 2), 0.5)
                  if(distance < 50){
                      cnx.save()
                      cnx.beginPath()
                      cnx.moveTo(x,y)  //画笔移动到某处
                      cnx.lineTo(date[i].x,date[i].y) //与某点相连
                      cnx.strokeStyle = "#333333"
                      cnx.lineWidth = "0.3"
                      cnx.stroke()
                      cnx.restore()
                  }
              }
          }

    鼠标事件

    can.addEventListener("mousemove",function(e){
              date.pop();
              date.push({
                  x:e.clientX,
                  y:e.clientY,
                  cx:0,
                  cy:0
              })
              link(e.clientX, e.clientY)
          })

    函数

    beginPath() 开始路径
    closePath() 闭合路径
    moveTo(x,y)将触笔移动到x,y点
    lineTo(x,y)绘制到x,y点
    stroke() 触笔方法画线 默认为黑色
    fill()填充方法
    rect(x,y,w,h)矩阵路径
    save()保存路径
    restore() 恢复路径

挺好的按钮样式

图片说明

全部评论

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务