步骤一 思路

根据 deviceorientation alpha 属性, 找出角度

根据不同角度,旋转表盘.

绘制表盘.用canvas?

canvas 旋转.全部都重新画一遍.可以.

表盘样式,

一个圆圈,

有八个 刻度

以及 八个文字.

圆圈可以画,

我计算出角度,

按照 2 Math.PI / 8 也可以画出刻度.

问题, 能不能根据圆心坐标和角度,和半径

计算出坐标位置?

理论上可以.

r * sin

r * cos

即可.

那我们直接求 坐标.

半径相同,的位置, 我们画 刻度

半径稍微大的位置, 我们 写文字.

文字需要旋转.

文字需要旋转的角度是,与 传入的角度相同.

然后需要一个 指向屏幕上方的,固定指针.

问题,alpha 什么值时指北部?

我们假设 0 时,他是指向北方的.

步骤 2 画出静态图

// 先画图.

var myCanvas = document.getElementById("myCanvas");

var ctx = myCanvas.getContext("2d");

ctx.beginPath();

// 先画一个圈.

// 半径

var r = 80;

ctx.arc(250,250,r,0,2 * Math.PI,0);

ctx.strokeStyle = "firebrick";

ctx.lineWidth = 10;

ctx.stroke();

// 计算八个坐标.

// 先生成八个 角度.

var center = {

x : 250,

y : 250

}

var arr = getZuobiao(center,r);

// 根据坐标, 我们画出几个圆圈 当做刻度

arr.forEach((item) => {

ctx.beginPath();

ctx.arc(item.x,item.y,8,0,2 * Math.PI,0);

ctx.fillStyle = "#333333";

ctx.fill();

});

//

var textArr = getZuobiao(center,r + 40);

// 根据坐标, 我们画出 字.

textArr.forEach((item,index) => {

// 我们需要判断 哪个是哪个, 所以我们先把关键字,弄成一个数组.

var str = ["东南","正南","西南","正西","西北","正北","东北","正东"];

ctx.beginPath();

// 文字居中

ctx.textAlign = "center";

ctx.textBaseline = "middle";

ctx.font = "20px Arial";

ctx.fillText(str[index],item.x,item.y);

})

// 中间画一条直线

ctx.beginPath();

ctx.moveTo(center.x,center.y);

ctx.lineTo(center.x,center.y - r + 30);

ctx.strokeStyle = "#333333";

ctx.lineCap = "round";

ctx.lineWidth = 8;

ctx.stroke();

// 封装成函数, 因为我们还要起第二组 坐标

function getZuobiao (center,r) {

var step = Math.PI / 4;

var arr = [];

var reg = 0;

// 临时角度

var reg1 = reg;

for(var i = 0; i < 8;i++) {

var item = arr[i] = {};

reg1 += step;

item.x = center.x + r * Math.cos(reg1);

item.y = center.y + r * Math.sin(reg1);

// 改变角度

}

return arr;

}

// 静态图已经画出来.

步骤3 动起来.

指南针 + canvas

:root,body{

width: 100vw;

height: 100vh;

margin: 0;

padding: 0;

font-size: 20px;

}

#myCanvas{

display: block;

width: 100vw;

height: 100vw;

margin: auto;

border: 1px solid black;

}

// 先画图.

var myCanvas = document.getElementById("myCanvas");

var ctx = myCanvas.getContext("2d");

function move (reg) {

// 每次作画时,我们清空画布

ctx.clearRect(0,0,500,500);

// 半径

var r = 80;

//圆心

var center = {

x : 250,

y : 250

}

// 角度

var reg = reg * (Math.PI / 180);

// 基本圈

ctx.beginPath();

ctx.arc(250,250,r,0,2 * Math.PI,0);

ctx.strokeStyle = "firebrick";

ctx.lineWidth = 10;

ctx.stroke();

// 根据坐标, 我们画出几个圆圈 当做刻度

// 画刻度.

var arr = getZuobiao(center,r,reg);

arr.forEach((item) => {

ctx.beginPath();

ctx.arc(item.x,item.y,8,0,2 * Math.PI,0);

ctx.fillStyle = "#333333";

ctx.fill();

});

// 画字.

var textArr = getZuobiao(center,r + 40,reg);

// 根据坐标, 我们画出 字.

textArr.forEach((item,index) => {

// 我们需要判断 哪个是哪个, 所以我们先把关键字,弄成一个数组.

var str = ["东南","正南","西南","正西","西北","正北","东北","正东"];

ctx.beginPath();

// 文字居中

ctx.textAlign = "center";

ctx.textBaseline = "middle";

ctx.font = "20px Arial";

ctx.fillText(str[index],item.x,item.y);

})

// 中间画一条直线

ctx.beginPath();

ctx.moveTo(center.x,center.y);

ctx.lineTo(center.x,center.y - r + 30);

ctx.strokeStyle = "#333333";

ctx.lineCap = "round";

ctx.lineWidth = 8;

ctx.stroke();

}

function getZuobiao (center,r,reg) {

var step = Math.PI / 4;

var arr = [];

// 临时角度

var reg1 = reg;

for(var i = 0; i < 8;i++) {

var item = arr[i] = {};

reg1 += step;

item.x = center.x + r * Math.cos(reg1);

item.y = center.y + r * Math.sin(reg1);

// 改变角度

}

return arr;

}

move(0);

// 传不同角度即可.

var lasttime = 0;

window.addEventListener("deviceorientation",function (e) {

if(new Date().getTime() - lasttime > 50){

var reg = e.alpha;

show.innerText = reg;

// 360 要转换成弧度.

move(reg);

lasttime = new Date().getTime();

}

})

问题 每次我重新进来的时候, 都指向正北? 什么鬼?

每次重新进来的时候, alpha值都是0 左右.

安卓苹果皆如此, 问题出在哪里?

很奇怪,我怀疑, alpha 值是否能指北, alpha值本身跟地球方向无关吧?

只是旋转角度吧?

先这样吧 回头再想.

html5 指南针,14.html5 作业 简单移动端-指南针 用 canvas 画一下.相关推荐

  1. web网页设计实例作业 HTML5+CSS大作业——简单的个人图片网站(6页)

    HTML5+CSS大作业--简单的个人图片网站(6页) 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. ...

  2. HTML5期末大作业:奶茶网站设计——带音乐图片滚动奶茶(6页) 美食网页设计作业 简单大学生静态HTML网页作品

    HTML5期末大作业:奶茶网站设计--带音乐图片滚动奶茶(6页) 美食网页设计作业 简单大学生静态HTML网页作品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器 ...

  3. HTML5+CSS期末大作业:篮球明星个人网站设计——篮球明星介绍(6页) 简单的学生DW网页设计作业成品 web课程设计网页规划与设计 简单个人网页设计作业 静态HTML旅行主题网页作业 DW

    HTML5+CSS期末大作业:篮球明星个人网站设计--篮球明星介绍(6页) 简单个人网页设计作业 静态HTML旅行主题网页作业 DW个人网站模板下载 大学生简单个人网页作品代码 常见网页设计作业题材有 ...

  4. HTML5+CSS大作业——简单的程序员个人博客(7页) 大学个人博客网页制作教程 表格布局网页模板

    HTML5+CSS大作业--简单的程序员个人博客(7页) 大学个人博客网页制作教程 表格布局网页模板 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家 ...

  5. HTML5+CSS期末大作业:个人主页介绍主题——-我们的挚爱 (7页) 学生DW网页设计作业成品 大学生个人网站作业模板 简单个人网页制作

    HTML5+CSS期末大作业:个人主页介绍主题---我们的挚爱 (7页) 学生DW网页设计作业成品 大学生个人网站作业模板 简单个人网页制作 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅 ...

  6. HTML5期末大作业:旅游网站网站设计——绿色的随行旅游网站( 1页) 出行游玩网页设计作业,简单大学生静态HTML网页作品

    HTML5期末大作业:旅游网站网站设计--绿色的随行旅游网站( 1页) 出行游玩网页设计作业,简单大学生静态HTML网页作品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠 ...

  7. HTML5+CSS期末大作业:个人博客网站设计——个人博客(7页) 学生DW网页设计作业成品 web课程设计网页规划与设计 简单的静态网页制作

    HTML5+CSS期末大作业:个人主页/个人介绍网站设计--个人博客(7页) 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材有 个人. 美食. 公 ...

  8. HTML5期末考核大作业: 网站——美丽家乡 云南民族文化(8页面) ~ 学生DW网页设计作业源码

    HTML5期末考核大作业: 网站--美丽家乡 云南民族文化(8页面) ~ 学生DW网页设计作业源码 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页 ...

  9. HTML5+CSS期末大作业:运动体育网站设计主题——体育铅球(5页)带注册 期末作业HTML代码

    学生网页课程设计期末作业下载 web网页设计制作成品- 详情介绍 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. ...

  10. HTML5+CSS期末大作业:运动体育网站设计主题——体育铅球(5页)带注册 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品...

    常见网页设计作业题材有 ​​个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. 明星. 服装. 体育. 化妆品. 物流. 环保. 书籍. 婚纱. 军 ...

最新文章

  1. 漫画:5分钟了解什么是动态规划?
  2. python field详解_Django中models Field详解
  3. 原相机怎么拍出网图_专访5位时尚生活达人,他们都用哪款相机记录生活美好瞬间...
  4. React中 useState在合成事件中是异步的,怎么获取到useState 设置后的最新值,或者说setState中获取到最新值
  5. vue项目cordova打包的android应用
  6. Java Socket笔记-udpSocket简单收发包
  7. .net 序列化与反序列化
  8. Jmeter接口测试三种类型
  9. P1165 日志分析 洛谷
  10. ntko web firefox跨浏览器插件_Web浏览器如何使用进程和线程
  11. 实验、配置Eigrp 验证,汇总
  12. java非静态内部类如何创建对象实例
  13. Java反编译工具汇总
  14. Easyui 默认图标以及自定义图标
  15. 读书笔记-整理的艺术
  16. oeasy教您玩转vim - 60- # vim选项
  17. 【C语言】数字直角三角形,数字矩阵,蛇形数组
  18. R语言逻辑回归的预测概率怎么算
  19. 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
  20. linux命令行下写for语句,Linux命令行 – 流程控制:for 循环

热门文章

  1. Auto CAD 2022安装教程【64位】
  2. Qt实现圆形组合按钮,摇杆
  3. Java的第一个你好世界
  4. 智能衣橱控制系统的设计
  5. c语言:数组插入处理
  6. [UVM]UVM Register Test Sequence
  7. c语言代码姓名全拼,巧用拼音首字母输入人名(代码)
  8. 资产标签二维码方案设计
  9. php中notice怎么去掉,怎么关闭php的notice
  10. C++如何判断一个程序是 死锁 还是 死循环,如何进行问题定位与分析