当前位置: 首页 > news >正文

移动web开发中,好用的小方法

1.检查是否触屏设备

//此方法在chrome模拟手机的模式中似乎无效,但是在iphone中是有效的,在安卓中待测试
function isTouchDevice() {
    return ('ontouchstart' in document.documentElement);
}

2.检测更多的设备和浏览器信息,靠的是ua信息

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或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
            };
    }(),
    language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
//document.writeln("语言版本: "+browser.language);
//document.writeln(" 是否为移动终端: "+browser.versions.mobile);
//document.writeln(" ios终端: "+browser.versions.ios);
//document.writeln(" android终端: "+browser.versions.android);
//document.writeln(" 是否为iPhone: "+browser.versions.iPhone);
//document.writeln(" 是否iPad: "+browser.versions.iPad);
//document.writeln(navigator.userAgent);

3.H5侦听用户点击一次返回按钮,做到不刷新页面,而是回调函数

//用法
onBackBtnClick(function () {
    //点击返回按钮后要做些什么
});

/**
 * 侦听浏览器返回按钮的点击事件。
 * ps1.每调用一次本函数,本浏览器窗口会重定向到一个新页面,但是页面不会刷新,所以在用户看来除了地址变了,其它什么都没变,
 * 而在浏览器看来是跳到了新页面,只是没有加载新页面的元素
 * @param fn function 当用户点击浏览器返回按钮,返回到调用本函数时所在页面时执行。
 *                      ps.因为允许多次调用本函数,所以有可能会跳了很多个页面,所以不是每次点返回键都会调用这个函数
 * @param [one=true] bool 这个事件是否只响应一次,true是,false否。默认true。
 * */
function onBackBtnClick(fn,one) {
    var mark = Math.random(),
        thisUrl = location.href;//保存当前链接

    //添加一个新页面到浏览器历史(只有做这一步,点击返回按钮才不会返回上一页,而是留在本页并触发事件)
    history.pushState({}, "", "#newWin&mark="+mark);

    window.addEventListener('popstate',back);

    function back(){
        if(location.href==thisUrl){//现在的链接和之前保存的一致的话,就执行
            console.log(location.href,thisUrl);
            fn&&fn();
            if(one!==false)
                window.removeEventListener('popstate',back);//让这个事件只响应一次
        }
    }
}

如果想要防止用户误点击返回键,上面的函数可以这样调用:

function disableBackBtn(){
    onBackBtnClick(function(){
        disableBackBtn();
    });
}
disableBackBtn();

好恐怖,难怪以前一直禁用类似的api

相关文章:

  • Resx 文件无效,未能加载 .RESX 文件中使用的类型
  • JDK中文方框乱码问题
  • 32 脚本编程风格
  • 让低版本的 Android 项目显示出 Material 风格的点击效果
  • eclipse安装pydev插件时没有任何错误提示,但是就是装完了后不显示pydev的设置项...
  • bzoj2337
  • android sqlite 数据类型
  • 来一篇新鲜的招聘笔试题(2014秋招版)
  • 接口和实现分离的好处
  • SQL数据库如何存储?
  • UIGestureRecognizerState
  • HashMap工作原理(转载)
  • hive 更多资料urls
  • hive0.13.1配置hwi
  • CSS3 Filter的十种特效
  • Android系统模拟器绘制实现概述
  • C++类中的特殊成员函数
  • leetcode98. Validate Binary Search Tree
  • Linux Process Manage
  • Python语法速览与机器学习开发环境搭建
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Cloud Feign的两种使用姿势
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 翻译:Hystrix - How To Use
  • 分布式事物理论与实践
  • 后端_MYSQL
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 模型微调
  • 小而合理的前端理论:rscss和rsjs
  • 正则学习笔记
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​configparser --- 配置文件解析器​
  • #### go map 底层结构 ####
  • ###STL(标准模板库)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (一)VirtualBox安装增强功能
  • (转)关于多人操作数据的处理策略
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .apk 成为历史!
  • .describe() python_Python-Win32com-Excel
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net Remoting常用部署结构
  • .NET 读取 JSON格式的数据
  • .NET 发展历程
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 中viewstate的原理和使用
  • .NET轻量级ORM组件Dapper葵花宝典
  • @SpringBootApplication 包含的三个注解及其含义
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BZOJ4016][FJOI2014]最短路径树问题