HTML5---canvas | 地理定位

一、canvas绘图

1.向html5页面添加canvas元素

<canvas  id="canvas"></canvas>

2.设置画布大小

let canvas= document.getElementById("canvas");
//设置canvas 画布大小
canvas.width=800;
canvas.height=800;

3.创建一个2d对象

let context = canvas.getContext("2d");

4.绘制图形

绘制一个矩形
context.fillstyle="red";   //图形填充颜色
//fillRect(x1,y1,x2,y2);   x1,y1矩形起始点坐标,x2,y2矩形终止点坐标
context.fillRect(0,0,300,200);

绘制一条线
context.strokeStyle="red";   //线性颜色
context.moveTo(300,300);     //线条的起始点
context.lineTo(400,500);     //线条的终止点

绘制弧线的方法:

context.arcTo(x1,y1,x2,y2,radiu) 
x1,y1为圆弧的第一个控制点,x2,y2为第二个控制点,radiu为圆弧半径  

在这里插入图片描述
在这里插入图片描述

绘制一条弧线
context.strokeStyle="yellow";
context.moveTo(0,300);   //起始点 
context.arcTo(50,350,100,300,50);  
context.lineTo(100,300);  //终止点
context.stroke();

绘制圆弧的方法:

context.arc(x,y,radiu,startangle,endangle,anticlockwise)
x,y:圆心坐标,radiu:圆的半径,startangle:起始角度,endangle:终止角度;
anticlockwise值为true逆时针绘制,值为false顺时针绘制,默认false
绘制一个圆弧
context.fillStyle="blue";
context.strokeStyle="black";
context.arc(300,300,50,0,Math.PI/2,false);
context.stroke();  //画线方法,会绘制线条颜色
context.fill();   //填充方法,会绘制填充的颜色

在这里插入图片描述

//最后一个参数为true时:
context.arc(300,300,50,0,Math.PI/2,false);//从0弧度的位置逆时针绘制到PI/2的位置

在这里插入图片描述

绘制圆形渐变
1.创建一个圆形渐变
createRadialGradient(x1,y1,r1,x2,y2,r2);
//x1,y1,r1初始圆的坐标及半径
//x2,y2,r2终止圆的坐标及半径
let gradient = context.createRadialGradient(500,500,0,500,500,100);

2.设置渐变颜色
addColorStop(area,color);
//area为设置的相对于起始位置的偏离区域

gradient.addColorStop(0,"blue");
gradient.addColorStop(0.2,"red");
gradient.addColorStop(0.4,"green");
gradient.addColorStop(0.6,"orange");
gradient.addColorStop(0.8,"yellow");
gradient.addColorStop(1,"pink");
context.fillStyle=gradient;
context.arc(500,500,100,0,Math.PI*2);
context.fill();

在这里插入图片描述
绘制图片的方法:

drawImage(image,x1,y1,width,height,cx1,cy1,cwidth,cheight);
x1,y1为图片的左上角起始坐标 width,height为设置图片的宽高,
cx1,cy2裁剪图片的左上角起始位置,cwidth,cheight为裁剪图片的宽高,相对于图片的初始大小而言
 var image = new Image();
 image.src="http://image.biaobaiju.com/uploads/20190728/18/1564309051-KvwmBxdSsn.jpg";
 context.drawImage(image,0,0,200,300);

在图片加载时进行裁剪—clip()

 var image = new Image();
    image.src="http://image.biaobaiju.com/uploads/20190728/18/1564309051-KvwmBxdSsn.jpg";
    //边绘制边裁剪  先绘路径 再用  clip()裁剪
    image.onload=function(){
        context.moveTo(50,100);
        context.lineTo(300,300);
        context.lineTo(100,300);
        context.lineTo(50,100);
        context.clip();
        context.drawImage(image,0,0);
     }
绘制文字
filltext(content,x,y);
content 文字内容,x,y为文字起始绘制坐标 
strokeText()用法同filltext()

  context.font = "4rem Arial";   //设置字体大小和样式
  //实心字 
  context.fillText("TEXT FILL",60,60);
  //空心字
  context.strokeText("TEXT FILL",60,60);

阴影相关属性:

shadowBlur      //阴影模糊大小
shadowColor     //阴影颜色
shadowOffsetX   //阴影X方向偏移
shadowOffsetY   //阴影Y方向偏移

save()与restore()的使用

var fontsize=13;
     var addsize=document.querySelector("#add");
    var decsize=document.querySelector("#dec");
    addsize.addEventListener("click",function(){
        context.clearRect(0, 0, 400, 400);
        context.save();   //存储当前字体大小及样式
        fontsize++;
        context.fillStyle="red";
        context.font=fontsize+"px Arial";
        context.fill();
        context.fillText("测试save和restore",50,50,300);
    })
    decsize.addEventListener("click",function(){
        context.clearRect(0,0,400,400);
        fontsize--;
        context.restore();   //弹出堆栈最上方的存储状态,并在此使用
        context.fillStyle="blue";
        context.fill();
        context.fillText("测试save和restore",50,50,300);
    })

transform()

transform(水平缩放,水平斜切,垂直斜切,垂直缩放,水平位移,垂直位移)

context.transform(1, 1, 0, 1, 0, 0);
context.fillRect(10, 20, 100, 100);

在这里插入图片描述

图片颜色拾取案例

getImageData(sx,sy,a,b);
sx,sy 当前点击位置的坐标
a,b 当前鼠标点击的位置1个单位内的像素信息

该方法返回的data值即为当前点击范围内颜色的rgb值
var img=new Image();
img.src="img/bg.jpg";
img.onload=function(){
        context.drawImage(this,0,0,800,500);
        canvas.addEventListener("click",function(e){ 
        //必须是给canvas添加监听事件,不能是img,页面只存在canvas一个页面dom
          var colorx = e.layerX;
          var colory = e.layerY;
          var layer = context.getImageData(colorx,colory,1,1).data;
          console.log(layer);   //layer前三个数据为颜色rgb值,第四个数为透明度
          var opacity= layer[3]/255;
          get.style.backgroundColor="rgba("+layer[0]+","+layer[1]+","+layer[2]+","+opacity+")";
        })
 }

二、地理定位

 var getlocation = document.querySelector("#getlocation");
    getlocation.onclick = function () {
        console.log(1);
        //检测浏览器是否支持定位
        if (navigator.geolocation) {
            //getCurrentPosition(getsuccess, error)
            //getsuccess为获取定位成功执行的回调函数
            //error为获取定位失败执行的回调函数 
            navigator.geolocation.getCurrentPosition(getsuccess, error);
        } else {
            console.log("该浏览器不支持地理定位");
        }
    }
    function getsuccess(position){
        console.log(position);
         /* accuracy:精确度
         latitude:纬度
         longitude:经度
         altitude:海拔
         altitudeAcuracy:海拔高度的精确度
         heading:朝向
         speed:速度
         * */
    }
    function error(err) {
        console.log(err);
        /* 1、message:错误信息
         *2、 code:错误代码。
         * */
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值