HTML5中的canvas动画以及地理定位
Canvas
什么是canvas
?
canvas
(画布) 是可以使用Javascript
来绘制图形的html
元素. 基本的语法结构:
<canvas id="" width="宽度像素个数" height="高度像素个数"></canvas>
案例.
canvas
的应用场景
网页特效.
网页游戏.
数据可视化图表.
canvas
基础图形图像的绘制
canvas
的基本使用步骤:
let cvs = document.getElementById('canvas')
// 获取用于绘制图形的 Context 对象
let ctx = cvs.getContext('2d')
ctx.xxxxxxxx()
contextType
上下文类型
'
2d
' 将会返回CanvasRenderingContext2D
对象,用于渲染二维图形'
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
)是将预先设定好的坐标点,按照顺序连接起来所形成的图形.
路径绘制的基本步骤:
调用
ctx.beginPath()
开启一条新路径.调用
ctx.moveTo(x, y)
将画笔移动到指定位置.调用相关方法开始绘制路径(例如:
ctx.lineTo(x, y)
)最后通过
stroke()
或fill()
方法进行描边或填充.
案例:绘制一个三角形.
案例:离线画板.
触摸相关事件总结
touchstart
开始触摸时触发
touchmove
触摸移动时触发
touchcancel
触摸被打断取消时触发
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().leftlet top = cvs.getBoundingClientRect().toplet x = e.touches[0].pageX - leftlet y = e.touches[0].pageY - topctx.beginPath()ctx.moveTo(x, y)})// 触摸移动时触发cvs.addEventListener("touchmove", (e)=>{let left = cvs.getBoundingClientRect().leftlet top = cvs.getBoundingClientRect().toplet x = e.touches[0].pageX - leftlet y = e.touches[0].pageY - topctx.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)
实现弹幕.
新增输入框与按钮. 为按钮绑定事件. 点击按钮后, 将文本框找中的内容封装成
dm
对象{text:'xxx', x:1, y:4}
. 将dm
对象添加到dmlist
中.全局启动一个定时器, 每
1000/60
执行一次, 每次重新计算dmlist
中每个弹幕对象的x
属性, 然后绘制每个dm
对象.
动画卡顿的核心原因: 掉帧
windw.requestAnimationFrame()
requestAnimationFrame(callback)
方法用于请求浏览器绘制动画帧时, 执行callback
.
基于requestAnimationFrame()
实现动画的代码基本结构如下:
function draw(){// 计算 耗时代码xxxxxxxxxwindow.requestAnimationFrame(draw)
}
window.requestAnimationFrame(draw)
requestAnimationFrame
动画的间隔时间由显示器的刷新率控制. 若刷新率低, 则每秒执行的次数就少, 若刷新率高, 则每秒执行的次数就多.
地理定位
定位的基础与原理
IP
定位运营商基站定位
GPS
定位
地理定位的实现
地理定位API
允许用户向web
应用程序提供他们的位置(经纬度).但是这个操作需要用户授权.
获取地理定位的相关代码如下:
let geoloc = window.navigator.geolocation
let success = function(msg){}
let error = function(msg){}
geoloc.getCurrentPosition(success, // 获取定位成功后执行的回调函数 error, // 获取定位失败后执行的回调函数 option // {}对象类型, 指定定位配置参数
);
案例: 获取浏览器所在当前位置(经纬度).
一旦定位成功, 将会输出如下位置信息:
coords: Coordinatesaccuracy: 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 的全部核心能力请前往示例中心。查阅详细接口说明文档请前往参考手册,使用遇到问题可查看常见问题或者提交工单。
HTML5中的canvas动画以及地理定位相关推荐
- HTML5中的canvas(画布)
HTML5中的canvas(画布) 1.关于canvas的简介 1.canvas是HTML5标签,表示画布,canvas只是作为图像绘制的容器,所有的绘制工作都在脚本JavaScript内部完成. 2 ...
- HTML5 中的canvas元素用于,HTML5中的Canvas元素
canvas 元素用于在网页上绘制图形. 什么是Canvas? HTML 5 的canvas元素使用JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas ...
- 用html语言编写笑脸,怎么使用HTML5中的Canvas绘制笑脸
怎么使用HTML5中的Canvas绘制笑脸 发布时间:2021-02-26 09:33:14 来源:亿速云 阅读:75 作者:清风 这篇"怎么使用HTML5中的Canvas绘制笑脸" ...
- php代码输出笑脸,利用HTML5中的Canvas绘制笑脸的代码
这篇文章主要介绍了利用HTML5中的Canvas绘制一张笑脸的教程,使用Canvas进行绘图是HTML5中的基本功能,需要的朋友可以参考下 今天,你将学习一项称为Canvas(画布)的web技术,以及 ...
- typescript中函数_如何在TypeScript中合成Canvas动画
typescript中函数 by Changhui Xu 徐昌辉 如何在TypeScript中合成Canvas动画 (How to Compose Canvas Animations in TypeS ...
- 使用HTML5中的canvas绘制灰太狼图像
大家好,我是byoneself,本次将为大家分享一下使用HTML5中的canvas绘制一个灰太狼图像,希望对大家有所帮助. 下图是效果图: 以下就是实现的代码: <!DOCTYPE html&g ...
- 干货 | React 中的 Canvas 动画
作者简介 掺水的酱油,携程软件技术专家,关注大前端及移动端相关技术. 移动端硬件性能越来越好的今天,页面的交互也越来越丰富,Web 体验在不断向原生应用靠拢,加入了越来越多的手势与动画.除了常见的 C ...
- html5中用画布画小狗,HTML5中的Canvas(绘制)
Canvas中不仅可以画线(路径),还能画很多其他的图像,这一章就介绍Canvas的其他两种绘图API. 矩形 我们在上一章只用线来画了一个矩形,其实可以一下子就画出来的,用下面函数: ctx.fil ...
- html5图层重叠,如何在html5中的canvas下实现ps中的叠加效果?
侃侃无极 html5中的canvas本身的API是不存在图层概念的.要想实现实现多图层功能,必须要使用多个canvas对象,不过这些canvas对象,是在内存中的,而不是在html的元素树中.每个ca ...
最新文章
- Java--对象与类(三)
- html圆圈里面问号,html,css实现问号提示信息
- linux关于tcp协议ack的实现--发送端对ack的处理
- WPF数据绑定、多个元素
- android怎样判断插入数据是否成功_MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据...
- day13-递归函数、匿名函数、内置函数
- Develop系列-API Guides-简介-应用基础
- 如何使用Orchard搭建敏捷个人的网站(1)
- 性能飙升160%!阿里云发布第七代ECS、云原生数据库PolarDB-X等重磅新品
- Lua 笔记--表达式
- (转)ZooKeeper伪分布式集群安装及使用
- NCM格式转换MP3格式
- 翌加科技:如何提高抖音直播活跃度
- 这段可笑的代码更坚定了我在VB.NET上的信心了
- 项目一 Windows Server 2012 R2服务器安装与配置
- C语言项目-精忠报国-第二天-COORD windows.h头文件/conio.h getch()函数/game.c showMap()函数 文字突出/怪物计数与打印/随机攻击力 stblib.h
- C语言中设置文字颜色
- 【STM32】标准库 菜鸟入门教程(3)闪烁及流水灯
- 反病毒引擎设计之虚拟机查毒篇
- 矛与盾:用VB打造驱动级键盘记录器,能过QQ密码框(源码)