国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序開發實戰教程之手勢解鎖

2019-11-19 18:56:40
字體:
來源:轉載
供稿:網友

代碼: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.jsmodule.exports = (function() {// 這里寫上你要執行的代碼…return xxx; //返回你要導出的方法,如果多個就寫成一個map})();…//// 其它文件中這么引用和執行:let MyLib = require('mylib.js');let lib = Mylib();lib.xxx(); // 執行或es6中的class://// mylib.jsmodule.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寫得太長,甚至超過了上千行,那你就要考慮把這個文件分拆成幾個?;蛘吣銓懙倪壿嫶a,可以幾個頁面共用,那么你也是要把代碼從這個頁面的js里拆出來的。

這里就引出了一個比較顯明的問題:在其它文件中,要修改頁面上的數據,又不能耦合性太大,因為你的這段邏輯代碼,在頁面A中會引用到,在頁面B中也會引用到,這樣總不能把setData操作放到這個共用的文件里吧。

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

這個時候,可能你會想到普通頁面開發時,用到的trigger機制,可惜這個只能在dom上綁定。也或許你用過http://statejs.org/ 這個庫,通過狀態機的變化來觸發某些特定的操作,這個方法非常巧妙,沒接觸過這個庫的開發者,建議學習一下。

不過我們還不需要再引入一個庫,這里,我們來寫個簡單的。簡單到只有幾行代碼。

代碼在這里:https://github.com/jsongo/wx-gesture-lock/blob/master/lib/event.js

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了。

以上所述是小編給大家介紹的微信小程序開發實戰教程之手勢解鎖,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙田区| 永和县| 星座| 三明市| 清新县| 阿荣旗| 娱乐| 奈曼旗| 万载县| 定日县| 淳安县| 桂林市| 绥中县| 鸡西市| 青龙| 临沧市| 凤庆县| 松溪县| 清徐县| 基隆市| 景洪市| 五寨县| 自治县| 偃师市| 吉林市| 鹤壁市| 西吉县| 沂水县| 定陶县| 南华县| 邻水| 衡南县| 云安县| 巴彦淖尔市| 砀山县| 平山县| 浦江县| 闽清县| 五指山市| 洛南县| 堆龙德庆县|