热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序开发实战教程之手势解锁

这篇文章主要介绍了微信小程序开发实战教程之手势解锁的相关资料,本文分步骤给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
这篇文章主要介绍了微信小程序开发实战教程之手势解锁的相关资料,本文分步骤给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

代码:https://github.com/jsongo/wx-gesture-lock

这个手势解锁的demo使用了https://github.com/lvming6816077/H5lock 这个项目的算法和主逻辑,整合到微信小程序来,修改了很多地方的语法来适配小程序,去掉了window、document等函数,同时也添加了新的机制来解耦界面的操作和第三方库,这个下面会介绍到。

不过可惜的是,这个demo也只能在开发工具上玩玩,到真机上测试的时候,手指一滑动,页面会跟着滚动,手势没法使用。

下面我们从这个例子中,来分析两个可以学习的点。

1、引入第三方库

我们上面提到的H5lock这个库,是个大神写的、专给H5用的一个功能。我们对它进行了一翻修改,把它引入到小程序上来了。

这里讨论下如何把第三方js库引入到小程序来,分以下几个步骤:

(1)模块化

小程序代码中,只能通过module.exports来导出的模块才能被引用,所以第一步,我们要对代码进行第一个改造,做exports导出:

module.exports = {
...
}
如果要在被引入的时候,执行一些操作,可以用以下两种方式:
//// mylib.js
module.exports = (function() {
// 这里写上你要执行的代码
…
return xxx; //返回你要导出的方法,如果多个就写成一个map
})();
…
//// 其它文件中这么引用和执行:
let MyLib = require('mylib.js');
let lib = Mylib();
lib.xxx(); // 执行
或es6中的class:
//// mylib.js
module.exports = class {
constructor() { // 
// 这里写上你要执行的代码
}
// 其它方法
xxx() { 
...
}
}
…
//// 其它文件中这么引用和执行:
let MyLib = require('mylib.js');
let lib = new Mylib(); // 用new来生成类的对象
lib.xxx(); // 执行

(2)对第三方库中的一些函数进行改造

小程序不支持以下几个函数或api:

window
document
frames
self
location
navigator
localStorage
history
caches
screen
alert
confirm
prompt
XMLHttpRequest
WebSocket

跟以上相关的代码一个个搜索出来,并想办法替换掉。

最常见的一般是document操作,第三方库主要是用它来引用dom,并对它进行设置或修改。这个可以通过下面第2点会讲的解耦技巧来巧妙地绕过。其它的就靠开发者自己去想了,这里没办法一一列出所有的情况。

本文的demo用的是class的方式来改造了第三方库。

2、一种解耦的方式

在小程序开发的时候,如果一个页面的js写得太长,甚至超过了上千行,那你就要考虑把这个文件分拆成几个。或者你写的逻辑代码,可以几个页面共用,那么你也是要把代码从这个页面的js里拆出来的。

这里就引出了一个比较显明的问题:在其它文件中,要修改页面上的数据,又不能耦合性太大,因为你的这段逻辑代码,在页面A中会引用到,在页面B中也会引用到,这样总不能把setData操作放到这个共用的文件里吧。

那有什么办法可以解耦呢?

这个时候,可能你会想到普通页面开发时,用到的trigger机制,可惜这个只能在dom上绑定。也或许你用过# 这个库,通过状态机的变化来触发某些特定的操作,这个方法非常巧妙,没接触过这个库的开发者,建议学习一下。

不过我们还不需要再引入一个库,这里,我们来写个简单的。简单到只有几行代码。

代码在这里:#

module.exports = function(app) {
app && (app.trigger = function(eventType, data) {
var pages = getCurrentPages(),
curPage = pages[pages.length-1],
methodName = 'on' + eventType.charAt(0).toUpperCase() + eventType.substr(1),
callback = curPage[methodName];
callback && callback.call(curPage, data);
});
};

如何使用这个库?分析一下大概的过程,其实非常简单,就是给app添加一个trigger方法,当它被调用的时候,去查找当前页面是否在onXXX方法,有的话就调用。这个方法名,是通过eventType这个参数变形而成的,如app.trigger('textChange') ,则这里会去查找页面中是否有onTextChange方法。所以其实这个解耦方法,本质上,是定义了一种规范。

首页在app.js里引入,并在onLaunch里调用:

var event = require('lib/event.js');
App({
onLaunch: function () {
event(this); // 在onLaunch里调用,传入的this就是app本身
},
globalData:{
}
});

然后在共用的抽离出来的文件中,在需要用到setData的地方,写成如下形式:

app.trigger('titleChanged', '请解锁');

接着在页面的js代码里,添加对这个trigger的响应:

Page({
…
onTitleChanged: function(newTitle) { // 文字变化的事件,自定义
this.setData({
title: newTitle
});
}
...
});

这三步做完就ok了。

以上所述是小编给大家介绍的微信小程序开发实战教程之手势解锁,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多微信小程序开发实战教程之手势解锁相关文章请关注PHP中文网!

推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
author-avatar
渴求打怪升级
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有