如果没有设置父元素的position属性,默认相对于body设置定位。
地理位置获取流程:1、用户打开需要获取地理位置的web应用。
2、应用向浏览器请求地理位置,浏览器弹出询问窗口,询问用户是否共享地理位置。
3、假设用户允许,浏览器从设别查询相关信息。
4、浏览器将相关信息发送到一个信任的位置服务器,服务器返回具体的地理位置。
检测浏览器支持:
JavaScript Code复制内容到剪贴板
function loadDemo() {
if(navigator.geolocation) {
document.getElementById(“support”).innerHTML = “HTML5 Geolocation supported.”
} else {
document.getElementById(“support”).innerHTML = “HTML5 Geolocation is not supported in
your browser.”
}
}
位置请求方式:
单次请求
JavaScript Code复制内容到剪贴板
navigator.geolocation.getCurrentPosition(updateLocation, handleLocationError, options)
回调函数updateLocation接受一个对象参数,表示当前的地理位置,它有如下属性:
latitude——纬度
longitude——精度
accuracy——精确度,单位米
altitude——高度,单位米
altitudeAccuracy——高度的精确地,单位米
heading—运动的方向,相对于正北方向的角度
speed——运动的速度(假设你在地平线上运动),单位米/秒
回调函数handleLocationError接受错误对象,error.code是如下错误号。
UNKNOWN_ERROR (error code 0) —— 错误不在如下三种之内,你可以使用error.message获取错误详细信息。
PERMISSION_DENIED (error code 1)—— 用不选择不共享地理位置
POSITION_UNAVAILABLE (error code 2) ——无法获取当前位置
TIMEOUT (error code 3) ——在指定时间无法获取位置会触发此错误。
第三个参数options是可选参数,属性如下:
enableHighAccuracy——指示浏览器获取高精度的位置,默认为false。当开启后,可能没有任何影响,也可能使浏览器花费更长的时间获取更精确的位置数据。
timeout——指定获取地理位置的超时时间,默认不限时。单位为毫秒。
maximumAge——最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。默认为0,表示浏览器需要立刻重新计算位置。
步骤 1: 在 HTML 中设置画布,创建一个引用,并获取上下文对象画布在 HTML 中通过 <canvas>标签定义。与其他标签类似,<canvas>的属性(如宽度和高度)作为特性输入。假设你希望创建一个宽 500 像素、高 500 像素的画布,并将其命名为“can1”,稍后在 JavaScript 中引用它时将用到。
在 HTML 文档中输入 <canvas>标签。
1
<canvas id="can1" width="500" height="500"></canvas>
在 JavaScript 文档中,创建一个变量,在编写脚本时该变量将代替“can1”。这里,我们将该变量命名为“myCanvas”,并使用 getElementById 将其链接到“can1”。
1
var myCanvas = document.getElementById("can1")
画布的 CanvasRenderingContext2D 对象具有操作画布的所有命令。 这里,在上下文对象中检索“can1”。将此变量称为“myContext”。
1
var myContext = myCanvas.getContext("2d")
步骤 2: 绘制矩形、直线、贝塞尔曲线、圆和形状
在画布上绘制简单的线条非常容易。使用 JavaScript 的 moveTo 方法可设置线条开始位置的坐标。然后只需使用另一方法设置终点。 第二步可以使用若干方法,每种方法专用于帮助呈现一种不同的线型,无论是直线、贝塞尔曲线还是圆弧。若要将线条合并为形状,可以闭合对 beginPath 和 closePath 方法调用中的线条。在指定所需的外观之后,可以使用 fill 方法应用颜色,并使用 stroke 方法执行线条和形状的呈现。
应用一些基本风格。这里,通过使用 fillStyle 属性绘制一个黑色矩形,将画布背景设置为黑色 (#000)。然后使用 strokeStyle 属性将线条颜色设置为白色 (#fff),使用 fillRect 方法应用黑色背景,并使用 lineWidth 属性将线条的粗细设置为 3 个像素。
// Specify a black background, and white lines that are 3 pixels thick.
myContext.fillStyle = '#000'
myContext.strokeStyle = '#fff'
myContext.fillRect(0,0,500,500)
myContext.lineWidth = 3myContext.fill()
在后续步骤中,将在这个 500×500 的黑色画布上继续构建。
现在,准备在画布的黑色表面绘制一个白色线条。先从直线开始。
使用 moveTo 方法设置直线的起点,使用 lineTo 方法设置终点。
这些方法采用两个数字作为参数。第一个数字表示 x 轴坐标,或者表示此坐标定义的自画布左侧算起的像素数。第二个数字是从顶部开始测量的 y 轴坐标。
// Draw a line that starts at the upper left corner of the canvas and ends at the lower right.
myContext.moveTo(0,0)
myContext.lineTo(500,500)
myContext.stroke()
若要绘制二次贝塞尔曲线,请使用 quadraticCurveTo 方法,该方法采用两个坐标—曲线的一个控制点和一个端点。
// Draw a swooping curve that spans the width of the canvas.
myContext.moveTo(0,0)
myContext.quadraticCurveTo(0,500,500,250)
myContext.stroke()
若要绘制三次贝塞尔曲线,请使用 bezierCurveTo 方法,该方法采用三个坐标—曲线的两个控制点和一个端点。
// Draw a V-shaped Bezier curve that spans the entire canvas.
myContext.moveTo(0,0)
myContext.bezierCurveTo(500, 820, 0, 500, 500, 0)
myContext.stroke()
若要创建一个圆,请使用 arc 方法:在设置用于绘制圆形轮廓的原点时,请确保将 moveTo 方法设置在沿线条路径的位置上,否则圆上将有一条通向 moveTo坐标的“尾巴”。
// Draw a circle that spans the width of the canvas.
myContext.moveTo(500,250)
myContext.arc(250,250,250,0,Math.PI*2,true)
myContext.stroke()
通过闭合对 beginPath 和 closePath 调用中的多个线条,可以从上述线条的任意组合中绘制一个 2D 形状。然后,整个形状可以使用 fill 接收一种颜色。前面设置的笔划样式将创建白色线条,在与应用于主体的红色 (#f00) 合并时,该形状将继承双色调外观。
// Draw a red diamond that spans the entire canvas.
myContext.fillStyle = '#f00'
myContext.beginPath()
myContext.moveTo(250,0)
myContext.lineTo(0,250)
myContext.lineTo(250,500)
myContext.lineTo(500,250)
myContext.closePath()
myContext.fill()
步骤 3: 显示位图图像
位图图像(如 .jpg、.png 和 .gif 文件)可以放置在画布上,甚至可以在代码中缩放和裁剪,不会触及原始文件。若要添加位图图像,请指定该图像的 URI,然后使用 drawImage 方法在画布上指定其位置。使用可选参数可将图像缩放到指定的大小,甚至仅显示图像的一个片段,这对于实现滚动背景或使用子画面表动态显示子画面等操作非常有用。
若要在屏幕上绘制位图图像而不进行任何修改,请指定要用于左上角的 x 坐标和 y 坐标。