1、获取位置
HTML5地理位置API,允许js程序向浏览器询问用户的真实信息,移动端使用GPS获取的位置,非常精准。但是地理位置API的浏览器访问前总是会询问是否同意,如果同意的话就会获取到位置,否则获取不到。
geolocation对象获取位置的方法:
- getCurrentPosition - 获取一次位置信息。
- watchPosition - 监听当前位置,位置改变之后就会执行函数
- clearWatch - 清除 watchPosition
具体获取用户位置代码如下:
代码语言:javascript复制navigator.geolocation.getCurrentPosition(success=>{
console.log(success.coords)//包含位置的经纬度、速度、海拔、经纬度精度、海拔精度信息
},fail=>{
console.log(fail)//获取失败的原因
},{
//可增加的4个配置参数
enableHighAccuracy:true,//高精度
timeout:5000,//超时时间,以ms为单位
maximumAge:24*60*60*1000,//位置缓存时间,以ms为单位
})
位置获取成功后返回的 success.coords 的属性及意义如下:
- coords.latitude - 纬度
- coords.longitude - 经度
- coords.altitude - 海拔
- coords.speed - 速度
- coords.accuracy - 经纬度精度
- coords.altitudeAccuracy - 海拔精度
- coords.heading - 方向,从正北开始的弧度数
具体详细内容,请点击《HTML5(二)——获取用户位置》。
2、摇一摇
微信活动页面经常有“摇一摇,拿好礼”,还有拼多多摇现金,摇一摇功能也非常常见。HTML5 提供的 devicemotion 事件封装了设备的运动传感器,提供设备的加速度,还提供设备自转速率。对设备运动状态进行判断,就可以实现“摇一摇”效果。
devicemotion 监听手机加速度变化的事件:
- acceleration - 加速度
- accelerationIncludingGravity - 重力加速度
- rotationRate - 旋转速度
- interval - 获取的时间间隔
摇一摇代码示例:
代码语言:javascript复制var shake_threshold = 4000; //放一移动的干扰,设置一个临界值
/* 使用之前先检查浏览器是否支持 */
if(window.DeviceMotionEvent){
/* 添加事件 */
window.addEventListener('devicemotion',function(eventData){
var acceleration =eventData.accelerationIncludingGravity;
var curTime = new Date().getTime();
if ((curTime-last_update)> 10) {
var diffTime = curTime -last_update;
last_update = curTime;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
var speed = Math.abs(x y z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
alert("摇一摇成功了!"); // Do something
}
}
})
}
3、判断手机类型
代码语言:javascript复制var type="";
if (/android/i.test(navigator.userAgent)){
type="android";
}
if (/ipad|iphone|mac/i.test(navigator.userAgent)){
type="ios";
}
4、检查浏览器类型
代码语言:javascript复制var browser={
versions : function(){
var u = navigator.userAgent, app = navigator.appVersion;
return {//移动终端浏览器版本信息
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端
ios: !!u.match(/(i[^;] ;( U;)? CPU. Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQ HD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
};
}(),
language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
browser.language // 语言
browser.versions.mobile // 是否为移动终端
browser.versions.ios // ios终端
browser.versions.android // android终端
browser.versions.iPhone // 是否为iPhone
browser.versions.iPad // 是否iPad
移动端浏览器也有很多,制作广告插件的同学,天天面对的是不同浏览器屏蔽广告,所以需要研究每个浏览类型。写插件的时候经常需要根据不同浏览器单独处理某些元素。
5、拍照
由于调用摄像头有使用权限,只能在本地运行,线上运行需要使用 https 域名才可以使用。网页内调用摄像头拍照。目前浏览器提供了API能够直接访问用户媒体设备(摄像头、麦克风)。
navigator.mediaDevices.getUserMedia
作用:为用户直接提供直接连接摄像头、麦克风的硬件设备接口。
代码语言:javascript复制navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){
// 获取成功
}
catch(function(error){
//获取失败
}
constraints 为音频和视频指定参数 ,如:
代码语言:javascript复制{ audio:true , video:true } // 在获得的媒体中同时包含音频与视频
{
audio: true,
video: { width: 1280, height: 720 } // 获得指定了大小的视频
}
6、打电话
网页信息中基本都有联系电话号码,联系我们等按钮,在移动端经常需要加入拨打电话功能,这样用户只要点击一下就可以拨打电话了。
使用代码如下:
代码语言:javascript复制<a href="tel:phonenumber">报警!</a>
以下两种方法亲测无效:
- <a href="wtai://wp//mc;10086">拨打10086 </a>
- <a href="dc:5040*0077">拨打热线</a>
7、发短信
想要实现在网页上点击快捷发送短信功能,此时安卓和ios写法相同,但是结果却不同。
代码语言:javascript复制<a href="sms:10010?body=TD">发送短信TD到10010</a>
安卓手机:点击之后直接就可以把 TD 作为内容,直接发送到10010。
ios手机:点击之后电话号码变成 10010?body=TD 。
测试各种机型,无法兼容所有,最后去掉内容,只保留电话号码。