知è˜
ä¸ç®¡æ˜¯ç¶²(wÇŽng)站,軟件還是å°ç¨‹åºï¼Œéƒ½è¦ç›´æŽ¥æˆ–間接能為您產(chÇŽn)生價值,我們在追求其視覺表ç¾(xià n)çš„åŒæ™‚,更å´(cè)é‡äºŽåŠŸèƒ½çš„ä¾¿æ·ï¼Œç‡ŸéŠ·çš„ä¾¿åˆ©ï¼Œé‹ç‡Ÿçš„高效,讓網(wÇŽng)ç«™æˆç‚ºç‡ŸéŠ·å·¥å…·ï¼Œè®“è»Ÿä»¶èƒ½åˆ‡å¯¦æå‡ä¼æ¥(yè)å…§(nèi)éƒ¨ç®¡ç†æ°´å¹³å’Œæ•ˆçŽ‡ã€‚å„ª(yÅu)秀的程åºç‚ºåŽæœŸå‡ç´šæä¾›ä¾¿æ·çš„æ”¯æŒï¼
您當(dÄng)å‰ä½ç½®>é¦–é » æ–°èžè³‡è¨Š » å°ç¨‹åºç›¸é—œ(guÄn) >
微信å°ç¨‹åºå…¥é–€æ•™ç¨‹ä¹‹ä¸‰ï¼šè…³æœ¬ç·¨ç¨‹
發(fÄ)表時間:2021-1-5
發(fÄ)布人:葵宇科技
ç€è¦½æ¬¡æ•¸(shù):79
今天,接著往下講,教大家為å°ç¨‹åºåŠ å…¥ JavaScript 腳本,åšå‡ºå‹•æ…‹(tà i)效果,以åŠå¦‚何跟用戶互動。å¸(xué)會了腳本,就能åšå‡ºå¾©(fù)雜的é é¢äº†ã€‚
本篇的難度è¦å¤§äºŽå‰å…©ç¯‡ï¼Œå¦‚果覺得ä¸å¥½ç†è§£ï¼Œå¯ä»¥å…ˆè·Ÿè‘—例å,動手åšä¸€é,然åŽå†è®€æ–‡å—說明,å¯èƒ½å°±å®¹æ˜“ç†è§£äº†ã€‚
ä¸€ã€æ•¸(shù)據(jù)ç¶å®š
å‰é¢çš„æ‰€æœ‰ç¤ºä¾‹ï¼Œå°ç¨‹åºçš„é é¢éƒ½æ˜¯å¯«æ»çš„,也就是é é¢å…§(nèi)容䏿œƒè®Šã€‚但是,é 颿•¸(shù)據(jù)其實å¯ä»¥é€šéŽè…³æœ¬å‚³å…¥ï¼Œé€šéŽè…³æœ¬æ”¹è®Šé é¢ï¼Œå¯¦ç¾(xià n)å‹•æ…‹(tà i)效果。
å°ç¨‹åºæä¾›äº†ä¸€ç¨®ç‰¹åˆ¥çš„æ–¹æ³•,讓é é¢å¯ä»¥æ›´æ–¹ä¾¿åœ°ä½¿ç”¨è…³æœ¬æ•¸(shù)據(jù),å«åš"數(shù)據(jù)ç¶å®š"(data binding)。
所謂"數(shù)據(jù)ç¶å®š",指的是腳本里é¢çš„æŸäº›æ•¸(shù)據(jù),會自動æˆç‚ºé é¢å¯ä»¥è®€å–的全局變é‡ï¼Œå…©è€…æœƒåŒæ¥è®Šå‹•。也就是說,腳本里é¢ä¿®æ”¹é€™å€‹è®Šé‡çš„值,é 颿œƒéš¨ä¹‹è®ŠåŒ–ï¼›åéŽä¾†ï¼Œé é¢ä¸Šä¿®æ”¹äº†é€™æ®µå…§(nèi)å®¹ï¼Œå°æ‡‰(yÄ«ng)的腳本變é‡ä¹Ÿæœƒéš¨ä¹‹è®ŠåŒ–。這也å«åš MVVM 模å¼ã€‚
下é¢çœ‹ä¸€å€‹ä¾‹å。打開home.js
文件,改æˆä¸‹é¢é€™æ¨£ã€‚
Page({ data: { name: '張三' } });
上é¢ä»£ç¢¼ä¸ï¼ŒPage()
方法的é…ç½®å°è±¡æœ‰ä¸€å€‹data
屬性。這個屬性的值也是一個å°è±¡ï¼Œæœ‰ä¸€å€‹name
屬性。數(shù)據(jù)ç¶å®šæ©Ÿåˆ¶è¦(guÄ«)定,data
å°è±¡çš„æ‰€æœ‰å±¬æ€§ï¼Œè‡ªå‹•æˆç‚ºç•¶(dÄng)å‰é é¢å¯ä»¥è®€å–的全局變é‡ã€‚也就是說,home
é é¢å¯ä»¥è‡ªå‹•讀å–name
變é‡ã€‚
接著,修改home.wxml
æ–‡ä»¶ï¼ŒåŠ å…¥name
變é‡ã€‚
<view> <text class="title">hello {{name}}text> view>
上é¢ä»£ç¢¼ä¸ï¼Œname
變é‡å¯«åœ¨{{...}}
里é¢ã€‚這是å°ç¨‹åºç‰¹æœ‰çš„語法,兩é‡å¤§æ‹¬è™Ÿè¡¨ç¤ºï¼Œå…§(nèi)éƒ¨ä¸æ˜¯æ–‡æœ¬ï¼Œè€Œæ˜¯ JavaScript 代碼,它的執(zhÃ)行çµ(jié)果會寫入é é¢ã€‚å› æ¤ï¼Œ{{name}}
表示讀å–全局變é‡name
的值,將這個值寫入網(wÇŽng)é 。
注æ„,變é‡åå€(qÅ«)分大å°å¯«ï¼Œname
å’ŒName
是兩個ä¸åŒçš„變é‡å。
開發(fÄ)者工具導(dÇŽo)å…¥é …ç›®ä»£ç¢¼ï¼Œé 颿¸²æŸ“çµ(jié)果如下。
å¯ä»¥çœ‹åˆ°ï¼Œname
變é‡å·²ç¶“(jÄ«ng)è‡ªå‹•æ›¿æ›æˆäº†è®Šé‡å€¼"張三"。
這個示例的完整代碼,å¯ä»¥æŸ¥çœ‹ä»£ç¢¼å€‰åº«ã€‚
é é¢å’Œè…³æœ¬å°äºŽè®Šé‡name
是數(shù)據(jù)ç¶å®šé—œ(guÄn)系,無論哪一方改變了name
的值,å¦ä¸€æ–¹ä¹Ÿæœƒè‡ªå‹•跟著改變。åŽé¢è¬›è§£åˆ°äº‹ä»¶æ™‚,會有雙方è¯(lián)動的例å。
二ã€å…¨å±€?jÇn)?shù)據(jù)
數(shù)據(jù)ç¶å®šåªå°ç•¶(dÄng)å‰é 颿œ‰æ•ˆï¼Œå¦‚æžœæŸäº›æ•¸(shù)據(jù)è¦åœ¨å¤šå€‹é é¢å…±äº«ï¼Œå°±éœ€è¦å¯«åˆ°å…¨å±€é…ç½®å°è±¡é‡Œé¢ã€‚
打開app.js
,改寫如下。
App({ globalData: { now: (new Date()).toLocaleString() } });
上é¢ä»£ç¢¼ä¸ï¼ŒApp()
æ–¹æ³•çš„åƒæ•¸(shù)é…ç½®å°è±¡æœ‰ä¸€å€‹globalData
屬性,這個屬性就是我們è¦åœ¨å¤šå€‹é é¢ä¹‹é–“分享的值。事實上,é…ç½®å°è±¡çš„任何一個屬性都å¯ä»¥å…±äº«ï¼Œé€™é‡Œèµ·å為globalData
åªæ˜¯ç‚ºäº†ä¾¿äºŽè˜åˆ¥ã€‚
ç„¶åŽï¼Œæ‰“é–‹home.js
,改æˆä¸‹é¢çš„å…§(nèi)容,在é é¢è…³æœ¬é‡Œé¢ç²å–全局å°è±¡ã€‚
const app = getApp(); Page({ data: { now: app.globalData.now } });
上é¢ä»£ç¢¼ä¸ï¼ŒgetApp()
函數(shù)是å°ç¨‹åºåŽŸç”Ÿæä¾›çš„函數(shù)方法,用于從é é¢ç²å– App 實例å°è±¡ã€‚拿到實例å°è±¡ä»¥åŽï¼Œå°±èƒ½å¾žå®ƒä¸Šé¢æ‹¿åˆ°å…¨å±€é…ç½®å°è±¡çš„globalData
屬性,從而把app.globalData.now
賦值給é é¢è…³æœ¬çš„now
屬性,進(jìn)è€Œé€šéŽæ•¸(shù)據(jù)ç¶å®šæ©Ÿåˆ¶ï¼Œè®Šæˆé é¢çš„全局變é‡now
。
最åŽï¼Œä¿®æ”¹ä¸€ä¸‹é é¢ä»£ç¢¼home.wxml
。
<view> <text class="title">ç¾(xià n)在是 {{now}}text> view>
開發(fÄ)者工具導(dÇŽo)å…¥é …ç›®ä»£ç¢¼ï¼Œé 颿¸²æŸ“çµ(jié)果如下。
å¯ä»¥çœ‹åˆ°ï¼Œé é¢è®€åˆ°äº†å…¨å±€é…ç½®å°è±¡app.js
里é¢çš„æ•¸(shù)據(jù)。
這個示例的完整代碼,å¯ä»¥æŸ¥çœ‹ä»£ç¢¼å€‰åº«ã€‚
三ã€äº‹ä»¶
事件是å°ç¨‹åºè·Ÿç”¨æˆ¶äº’å‹•çš„ä¸»è¦æ‰‹æ®µã€‚å°ç¨‹åºé€šéŽæŽ¥æ”¶å„種用戶事件,執(zhÃ)行回調(dià o)函數(shù),åšå‡ºå應(yÄ«ng)。
å°ç¨‹åºçš„常見事件有下é¢é€™äº›ã€‚
tap
:觸摸åŽé¦¬ä¸Šé›¢é–‹ã€‚longpress
:觸摸åŽï¼Œè¶…éŽ 350ms å†é›¢é–‹ã€‚如果指定了該事件的回調(dià o)函數(shù)并觸發(fÄ)了該事件,tap
事件將ä¸è¢«è§¸ç™¼(fÄ)。touchstart
:觸摸開始。touchmove
:觸摸åŽç§»å‹•。touchcancel
:觸摸動作被打斷,如來電æé†’,彈窗ç‰ã€‚touchend
:觸摸çµ(jié)æŸã€‚
上é¢é€™äº›äº‹ä»¶ï¼Œåœ¨å‚³æ’上分æˆå…©å€‹éšŽæ®µï¼šå…ˆæ˜¯æ•ç²éšŽæ®µï¼ˆç”±ä¸Šå±¤å…ƒç´ å‘ä¸‹å±¤å…ƒç´ å‚³æ’ï¼‰ï¼Œç„¶åŽæ˜¯å†’æ³¡éšŽæ®µï¼ˆç”±ä¸‹å±¤å…ƒç´ å‘ä¸Šå±¤å…ƒç´ å‚³æ’)。所以,åŒä¸€å€‹äº‹ä»¶åœ¨åŒä¸€å€‹å…ƒç´ 上é¢å…¶å¯¦æœƒè§¸ç™¼(fÄ)兩次:æ•ç²éšŽæ®µä¸€æ¬¡ï¼Œå†’泡階段一次。詳細(xì)的介紹,請åƒè€ƒæˆ‘寫的事件模型解釋。
å°ç¨‹åºå…許é é¢å…ƒç´ ,通éŽå±¬æ€§æŒ‡å®šå„種事件的回調(dià o)函數(shù)ï¼Œå¹¶ä¸”é‚„èƒ½å¤ æŒ‡å®šæ˜¯å“ªå€‹éšŽæ®µè§¸ç™¼(fÄ)回調(dià o)函數(shù)。具體方法是為事件屬性ååŠ ä¸Šä¸åŒçš„å‰ç¶´ã€‚å°ç¨‹åºæä¾›å››ç¨®å‰ç¶´ã€‚
capture-bind
:æ•ç²éšŽæ®µè§¸ç™¼(fÄ)。capture-catch
:æ•ç²éšŽæ®µè§¸ç™¼(fÄ)ï¼Œå¹¶ä¸æ–·äº‹ä»¶ï¼Œä¸å†å‘下傳æ’,å³ä¸æ–·æ•ç²éšŽæ®µï¼Œå¹¶å–消隨åŽçš„冒泡階段。bind
:冒泡階段觸發(fÄ)。catch
:冒泡階段觸發(fÄ)ï¼Œå¹¶å–æ¶ˆäº‹ä»¶é€²(jìn)一æ¥å‘上冒泡。
下é¢é€šéŽä¸€å€‹ä¾‹å,來看如何為事件指定回調(dià o)函數(shù)。打開home.wxml
文件,改æˆä¸‹é¢çš„代碼。
<view> <text class="title">hello {{name}}text> <button bind:tap="buttonHandler">點擊button> view>
上é¢ä»£ç¢¼ä¸ï¼Œæˆ‘們?yÅu)轫æ’å©•ç”±ç‹è‰˜ç²‹â‚¬æŒ‰éˆ•,并為這個按鈕指定了觸摸事件(tap
)的回調(dià o)函數(shù)buttonHandler
,bind:
å‰ç¶´è¡¨ç¤ºé€™å€‹å›žèª¿(dià o)函數(shù)會在冒泡階段觸發(fÄ)(å‰ç¶´é‡Œé¢çš„冒號å¯ä»¥çœç•¥ï¼Œå³å¯«æˆbindtap
也å¯ä»¥ï¼‰ã€‚
回調(dià o)函數(shù)å¿…é ˆåœ¨é é¢è…³æœ¬ä¸å®šç¾©ã€‚打開home.js
文件,改æˆä¸‹é¢çš„代碼。
Page({ data: { name: '張三' }, buttonHandler(event) { this.setData({ name: 'æŽå››' }), } });
上é¢ä»£ç¢¼ä¸ï¼ŒPage()
æ–¹æ³•çš„åƒæ•¸(shù)é…ç½®å°è±¡é‡Œé¢ï¼Œå®šç¾©äº†buttonHandler()
,這就是
相關(guÄn)案例查看更多
相關(guÄn)閱讀
- 怎么åšç¶²(wÇŽng)ç«™
- .netç¶²(wÇŽng)ç«™
- 楚雄å°ç¨‹åºé–‹ç™¼(fÄ)
- 伿¥(yè)ç¶²(wÇŽng)ç«™
- 云å—ç¶²(wÇŽng)站開發(fÄ)
- 迪慶å°ç¨‹åºé–‹ç™¼(fÄ)
- ç¶²(wÇŽng)絡(luò)å…¬å¸å ±åƒ¹
- æµ·å—å°ç¨‹åºåˆ¶ä½œå…¬å¸
- 昆明å°ç¨‹åºå®šåˆ¶é–‹ç™¼(fÄ)
- å°ç¨‹åºé–‹ç™¼(fÄ)排åå‰åå
- ç¶²(wÇŽng)站建è¨(shè)制作
- 開通微信å°ç¨‹åºè¢«é¨™
- 云å—å°ç¨‹åºé–‹ç™¼(fÄ)å…¬å¸å“ªå®¶å¥½
- 云å—ç¶²(wÇŽng)絡(luò)å…¬å¸
- 云å—電商網(wÇŽng)站建è¨(shè)
- 昆明å°ç¨‹åºå…¬å¸
- 云å—建è¨(shè)廳網(wÇŽng)站首é
- 云å—ç¶²(wÇŽng)站建è¨(shè)哪家好
- 英文網(wÇŽng)站建è¨(shè)å…¬å¸
- å°ç¨‹åº
- å°ç¨‹åºå®šåˆ¶é–‹ç™¼(fÄ)
- åšå°ç¨‹åºè¢«é¨™
- å°ç¨‹åºå•†åŸŽ
- 云å—å°ç¨‹åºé–‹ç™¼(fÄ)費用
- 云å—ç¶²(wÇŽng)站建è¨(shè)開發(fÄ)
- 云å—軟件è¨(shè)計
- flex
- 智慧農(nóng)貿(mà o)å¸‚å ´
- 云å—ç¶²(wÇŽng)站建è¨(shè)快速優(yÅu)化
- 云å—軟件定制