HTML5中的canvas动画以及地理定位

Canvas

什么是canvas?

canvas(画布) 是可以使用Javascript来绘制图形的html元素. 基本的语法结构:

<canvas id="" 
        width="宽度像素个数" 
        height="高度像素个数"></canvas>

案例.

canvas的应用场景

  1. 网页特效.

  2. 网页游戏.

  3. 数据可视化图表.

canvas基础图形图像的绘制

canvas的基本使用步骤:

let cvs = document.getElementById('canvas')
// 获取用于绘制图形的 Context 对象
let ctx = cvs.getContext('2d')  
ctx.xxxxxxxx()  

contextType 上下文类型

  1. '2d' 将会返回CanvasRenderingContext2D对象,用于渲染二维图形

  2. 'webgl' 将会返回WebGLRenderingContext对象,用于渲染三维图形

CanvasRenderingContext2D

绘制填充

ctx.fillStyle = 'red'  // 设置填充样式  颜色
ctx.fillRect(x, y, width, height)   // 填充一个矩形

绘制描边

ctx.strokeStyle = 'red'   // 设置描边样式   颜色
ctx.strokeRect(x, y, width, height)   // 对一个矩形描边

绘制文本

ctx.font = '25px  微软雅黑'
// 填充文本
ctx.fillText(text, x, y)    // (文本内容, 坐标x, 坐标y)
//描边文本
ctx.strokeText(text, x, y)

canvas路径绘制

路径(path)是将预先设定好的坐标点,按照顺序连接起来所形成的图形.

路径绘制的基本步骤:

  1. 调用ctx.beginPath()开启一条新路径.

  2. 调用ctx.moveTo(x, y)将画笔移动到指定位置.

  3. 调用相关方法开始绘制路径(例如: ctx.lineTo(x, y))

  4. 最后通过stroke()fill()方法进行描边填充.

案例:绘制一个三角形.

案例:离线画板.

触摸相关事件总结

  1. touchstart 开始触摸时触发

  2. touchmove 触摸移动时触发

  3. touchcancel 触摸被打断取消时触发

  4. touchend 触摸结束时触发

<script>
    let cvs = document.getElementById('canvas')
    let ctx = cvs.getContext('2d')
    // 开始触摸时执行   
    cvs.addEventListener("touchstart", (e)=>{
        console.log(e)
        // 获取当前坐标位置, 开启一个新路径
        // dom节点.getBoundingClientRect() 方法的返回值, 封装了
        // 当前dom节点相对于客户端的坐标位置
        let left = cvs.getBoundingClientRect().left
        let top = cvs.getBoundingClientRect().top
        let x = e.touches[0].pageX - left
        let y = e.touches[0].pageY - top
        ctx.beginPath()
        ctx.moveTo(x, y)
    })
    // 触摸移动时触发
    cvs.addEventListener("touchmove", (e)=>{
        let left = cvs.getBoundingClientRect().left
        let top = cvs.getBoundingClientRect().top
        let x = e.touches[0].pageX - left
        let y = e.touches[0].pageY - top
        ctx.lineTo(x, y)
        ctx.strokeStyle = 'red'
        ctx.stroke()
    })
​
</script>

canvas提供的绘制路径的常用API

ctx.rect() 用于绘制矩形路径

// 左上角x, 左上角y, 宽, 高
ctx.rect(x, y, width, height)

ctx.arc() 用于绘制圆弧路径

// (x,y) 圆形坐标, 半径, 起始弧度值, 结束弧度值
ctx.arc(x, y, radius, startangle, endangle)

canvas动画

动画的实现原理即每隔一段时间(非常快 1/60秒) 重绘canvas. 每次绘制时, 内容都会有些许变化, 由于视觉残留现象, 出现动画效果.

window.setInterval(()=>{
    计算并且设置最新的元素样式/位置/属性等
    重绘UI
}, 1000/60)

实现弹幕.

  1. 新增输入框与按钮. 为按钮绑定事件. 点击按钮后, 将文本框找中的内容封装成dm对象 {text:'xxx', x:1, y:4} . 将dm对象添加到dmlist中.

  2. 全局启动一个定时器, 每1000/60执行一次, 每次重新计算dmlist中每个弹幕对象的x属性, 然后绘制每个dm对象.

动画卡顿的核心原因: 掉帧

windw.requestAnimationFrame()

requestAnimationFrame(callback)方法用于请求浏览器绘制动画帧时, 执行callback.

基于requestAnimationFrame()实现动画的代码基本结构如下:

function draw(){
    // 计算  耗时代码
    xxxxxxxxx
    window.requestAnimationFrame(draw)
}
window.requestAnimationFrame(draw)

requestAnimationFrame动画的间隔时间由显示器的刷新率控制. 若刷新率低, 则每秒执行的次数就少, 若刷新率高, 则每秒执行的次数就多.

地理定位

定位的基础与原理

  1. IP定位

  2. 运营商基站定位

  3. GPS定位

地理定位的实现

地理定位API允许用户向web应用程序提供他们的位置(经纬度).但是这个操作需要用户授权.

获取地理定位的相关代码如下:

let geoloc = window.navigator.geolocation
let success = function(msg){}
let error = function(msg){}
geoloc.getCurrentPosition(
    success,  // 获取定位成功后执行的回调函数  
    error,    // 获取定位失败后执行的回调函数  
    option    // {}对象类型, 指定定位配置参数
);

案例: 获取浏览器所在当前位置(经纬度).

一旦定位成功, 将会输出如下位置信息:

coords: Coordinates
    accuracy: 19218             定位准确度       
    altitude: 0                 海拔高度    
    altitudeAccuracy: null      海拔准确度
    heading: NaN            
    latitude: 39.9078           纬度
    longitude: 116.3975         经度
    speed: NaN                  运动速度
timestamp: 1636426246419        毫秒时间戳

chrome浏览器只能适用于https协议的网站. 所以建议打开chrome的虚拟定位.

接入第三方位置服务平台 - 百度地图/高德地图

高德地图 JS API 是一套 JavaScript 语言开发的的地图应用编程接口,移动端、PC端一体化设计,一套 API 兼容众多系统平台。目前 JS API 免费开放使用。

JS API 提供了2D、3D地图模式,满足绝大多数开发者对地图展示、地图自定义、图层加载、点标记添加、矢量图形绘制的需求,同时也提供了 POI 搜索、路线规划、地理编码、行政区查询、定位等众多开放服务接口。

JS API 拥有完善的文档体,系统学习地图和服务接口调用请前往教程,快速了解 JS API 的全部核心能力请前往示例中心。查阅详细接口说明文档请前往参考手册,使用遇到问题可查看常见问题或者提交工单

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  《深入HTML5编程(第 2版)》首先介绍了HTML5的历史背景、新的语义标签及与以往HTML版本相比的根本变化,同时揭示了HTML5背后的设计原理。本书在上一版的基础上新增了SVG和拖放API相关内容,并对部分内容进行了更新。从第 2章起,分别围绕构建令人神往的富Web 应用,逐一讨论了HTML5Canvas、Geolocation、Communication、WebSocket、Forms、WebWorkers、Storage等API的使用,辅以直观明了的客户端和服务器端示例代码,让开发人员能够迅速理解和掌握新一代Web标准所涵盖的核心技术。《深入HTML5编程(第 2版)》后探索了离线Web应用并展望了HTML5未来的发展前景。   《深入HTML5编程(第 2版)》面向有一定经验的Web应用开发人员,对HTML5及未来Web应用技术发展有浓厚兴趣的读者也可以学习参考。 第1章 HTML5概述 1 1.1 HTML5发展史 1 1.2 关于2022年的那个神话 2 1.3 谁在开发HTML5 3 1.4 新的认识 3 1.4.1 兼容性和存在即合理 3 1.4.2 效率和用户优先 4 1.4.3 化繁为简 5 1.4.4 通用访问 5 1.5 无插件范式 5 1.6 HTML5的新功能 8 1.6.1 新的DOCTYPE和字符集 8 1.6.2 新元素和旧元素 9 1.6.3 语义化标记 10 1.6.4 使用Selectors API简化选取操作 15 1.6.5 JavaScript日志和调试 18 1.6.6 window.JSON 19 1.6.7 DOM Level 3 19 1.6.8 Monkeys、Squirrelfish和其他JavaScript引擎 19 1.7 小结 21 第2章 Canvas API 22 2.1 HTML5 Canvas概述 22 2.1.1 历史 22 2.1.2 canvas是什么 23 2.1.3 canvas坐标 23 2.1.4 什么情况下不用canvas 23 2.1.5 替代内容 24 2.1.6 CSS和canvas 25 2.1.7 浏览器对HTML5 Canvas的支持情况 25 2.2 使用HTML5 Canvas API 25 2.2.1 检测浏览器支持情况 25 2.2.2 在页面加入canvas 26 2.2.3 变换 28 2.2.4 路径 30 2.2.5 描边样式 32 2.2.6 填充样式 34 2.2.7 填充矩形区域 34 2.2.8 绘制曲线 35 2.2.9 在canvas插入图片 37 2.2.10 渐变 38 2.2.11 背景图 40 2.2.12 缩放canvas对象 42 2.2.13 Canvas变换 43 2.2.14 Canvas文本 45 2.2.15 应用阴影 46 2.2.16 像素数据 48 2.2.17 Canvas的安全机制 50 2.3 使用HTML5 Canvas创建应用 51 2.3.1 进阶功能之全页玻璃窗 54 2.3.2 进阶功能之为Canvas动画计时 54 2.4 小结 57 第3章 SVG 58 3.1 SVG概述 58 3.1.1 历史 58 3.1.2 理解SVG 59 3.1.3 可缩放图形 61 3.1.4 使用SVG创建2D图形 61 3.1.5 在页面添加SVG 61 3.1.6 简单的形状 62 3.1.7 变换SVG元素 63 3.1.8 复用内容 64 3.1.9 图案和渐变 64 3.1.10 SVG路径 65 3.1.11 使用SVG文本 66 3.1.12 组合场景 67 3.2 使用SVG创建交互式应用 68 3.2.1 添加树 69 3.2.2 添加updateTrees函数 69 3.2.3 添加removeTree函数 70 3.2.4 添加CSS样式 70 3.2.5 终代码 70 3.3 小结 74 第4章 音频和视频 75 4.1 HTML5 Audio和Video概述 75 4.1.1 视频容器 75 4.1.2 音频和视频编解码器 76 4.1.3 HTML5 Audio和Video的限制 77 4.1.4 audio元素和video元素的浏览器支持情况 77 4.2 使用HTML5 Audio和Video API 78 4.2.1 浏览器支持性检测 79 4.2.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值