「移动端」前端常见知识点总结

1、获取位置

HTML5地理位置API,允许js程序向浏览器询问用户的真实信息,移动端使用GPS获取的位置,非常精准。但是地理位置API的浏览器访问前总是会询问是否同意,如果同意的话就会获取到位置,否则获取不到。

geolocation对象获取位置的方法:

  • getCurrentPosition - 获取一次位置信息。
  • watchPosition - 监听当前位置,位置改变之后就会执行函数
  • clearWatch - 清除 watchPosition

具体获取用户位置代码如下:

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 - 获取的时间间隔

摇一摇代码示例:

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、判断手机类型

var type="";
if (/android/i.test(navigator.userAgent)){
    type="android";
}
if (/ipad|iphone|mac/i.test(navigator.userAgent)){
    type="ios";
 }

 

4、检查浏览器类型

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

作用:为用户直接提供直接连接摄像头、麦克风的硬件设备接口。

navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){
// 获取成功
}
catch(function(error){
//获取失败
}

 

constraints 为音频和视频指定参数 ,如:

{ audio:true , video:true } // 在获得的媒体中同时包含音频与视频
{
  audio: true,
  video: { width: 1280, height: 720 } // 获得指定了大小的视频
}

 

6、打电话

网页信息中基本都有联系电话号码,联系我们等按钮,在移动端经常需要加入拨打电话功能,这样用户只要点击一下就可以拨打电话了。

使用代码如下:

<a href="tel:phonenumber">报警!</a> 

 

以下两种方法亲测无效:

  • <a href="wtai://wp//mc;10086">拨打10086 </a>
  • <a href="dc:5040*0077">拨打热线</a>

7、发短信

想要实现在网页上点击快捷发送短信功能,此时安卓和ios写法相同,但是结果却不同。

<a href="sms:10010?body=TD">发送短信TD到10010</a>

 

安卓手机:点击之后直接就可以把 TD 作为内容,直接发送到10010。

ios手机:点击之后电话号码变成 10010?body=TD 。

测试各种机型,无法兼容所有,最后去掉内容,只保留电话号码。

posted @ 2021-08-27 12:00  前端人  阅读(541)  评论(0编辑  收藏  举报