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().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)

实现弹幕.

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

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

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

windw.requestAnimationFrame()

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

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

function draw(){// 计算  耗时代码xxxxxxxxxwindow.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: 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动画以及地理定位相关推荐

  1. HTML5中的canvas(画布)

    HTML5中的canvas(画布) 1.关于canvas的简介 1.canvas是HTML5标签,表示画布,canvas只是作为图像绘制的容器,所有的绘制工作都在脚本JavaScript内部完成. 2 ...

  2. HTML5 中的canvas元素用于,HTML5中的Canvas元素

    canvas 元素用于在网页上绘制图形. 什么是Canvas? HTML 5 的canvas元素使用JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas ...

  3. 用html语言编写笑脸,怎么使用HTML5中的Canvas绘制笑脸

    怎么使用HTML5中的Canvas绘制笑脸 发布时间:2021-02-26 09:33:14 来源:亿速云 阅读:75 作者:清风 这篇"怎么使用HTML5中的Canvas绘制笑脸" ...

  4. php代码输出笑脸,利用HTML5中的Canvas绘制笑脸的代码

    这篇文章主要介绍了利用HTML5中的Canvas绘制一张笑脸的教程,使用Canvas进行绘图是HTML5中的基本功能,需要的朋友可以参考下 今天,你将学习一项称为Canvas(画布)的web技术,以及 ...

  5. typescript中函数_如何在TypeScript中合成Canvas动画

    typescript中函数 by Changhui Xu 徐昌辉 如何在TypeScript中合成Canvas动画 (How to Compose Canvas Animations in TypeS ...

  6. 使用HTML5中的canvas绘制灰太狼图像

    大家好,我是byoneself,本次将为大家分享一下使用HTML5中的canvas绘制一个灰太狼图像,希望对大家有所帮助. 下图是效果图: 以下就是实现的代码: <!DOCTYPE html&g ...

  7. 干货 | React 中的 Canvas 动画

    作者简介 掺水的酱油,携程软件技术专家,关注大前端及移动端相关技术. 移动端硬件性能越来越好的今天,页面的交互也越来越丰富,Web 体验在不断向原生应用靠拢,加入了越来越多的手势与动画.除了常见的 C ...

  8. html5中用画布画小狗,HTML5中的Canvas(绘制)

    Canvas中不仅可以画线(路径),还能画很多其他的图像,这一章就介绍Canvas的其他两种绘图API. 矩形 我们在上一章只用线来画了一个矩形,其实可以一下子就画出来的,用下面函数: ctx.fil ...

  9. html5图层重叠,如何在html5中的canvas下实现ps中的叠加效果?

    侃侃无极 html5中的canvas本身的API是不存在图层概念的.要想实现实现多图层功能,必须要使用多个canvas对象,不过这些canvas对象,是在内存中的,而不是在html的元素树中.每个ca ...

最新文章

  1. Java--对象与类(三)
  2. html圆圈里面问号,html,css实现问号提示信息
  3. linux关于tcp协议ack的实现--发送端对ack的处理
  4. WPF数据绑定、多个元素
  5. android怎样判断插入数据是否成功_MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据...
  6. day13-递归函数、匿名函数、内置函数
  7. Develop系列-API Guides-简介-应用基础
  8. 如何使用Orchard搭建敏捷个人的网站(1)
  9. 性能飙升160%!阿里云发布第七代ECS、云原生数据库PolarDB-X等重磅新品
  10. Lua 笔记--表达式
  11. (转)ZooKeeper伪分布式集群安装及使用
  12. NCM格式转换MP3格式
  13. 翌加科技:如何提高抖音直播活跃度
  14. 这段可笑的代码更坚定了我在VB.NET上的信心了
  15. 项目一 Windows Server 2012 R2服务器安装与配置
  16. C语言项目-精忠报国-第二天-COORD windows.h头文件/conio.h getch()函数/game.c showMap()函数 文字突出/怪物计数与打印/随机攻击力 stblib.h
  17. C语言中设置文字颜色
  18. 【STM32】标准库 菜鸟入门教程(3)闪烁及流水灯
  19. 反病毒引擎设计之虚拟机查毒篇
  20. 矛与盾:用VB打造驱动级键盘记录器,能过QQ密码框(源码)

热门文章

  1. 软件构造第五次学习博客——SpotBugs概述
  2. IBM MQ 密钥库 自建证书 支持 ssl
  3. 活死细菌染色检测实例展示
  4. 基于UDP的歌词同步系统
  5. 记一次前端春招实习面经(已拿字节、腾讯offer)
  6. unity优化冷启动时间/加载时间总结
  7. python实现模糊搜索_Python英文搜索引擎(模糊搜索)
  8. Android项目:基于Android家庭理财系统手机软件设计(计算机毕业设计)
  9. Unity 一键翻译
  10. 大学女生学计算机人多吗,浙江大学计算机专业女生多吗