±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜ΢ÐÅΪºÎÒª´´ÔìWXS£¬WXSÌØÕ÷¼°ÊÊÓó¡¾°£¬uni-appÈçºÎÖ§³ÖWXS£¬²¢»ùÓÚ
WXS ÌáÉýÐÔÄÜÌåÑéµÄʵÏÖʾÀý£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÖªºõ,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼ÍƼö¡£ |
|
С³ÌÐò¼¼ÊõÁìÓò£¬Óм¸¸öÃÕÒ»ÑùµÄ´æÔÚ£ºÎ¢ÐŵÄWXS¡¢Ö§¸¶±¦µÄSJS¡¢°Ù¶ÈµÄFilter¡£
ºÜ¶à¿ª·¢Õß¶¼²»Ã÷°×ΪʲôҪÔìÕâÖÖÓïÑԽű¾µÄÂÖ×Ó³öÀ´£¬ÉõÖÁºÜ¶à¿ª·¢Õ߸ù±¾²»ÖªµÀËüÃǵĴæÔÚ¡£
Æäʵ¼¸´óС³ÌÐòƽ̨´´ÔìËüÃÇ£¬¶¼ÊÇΪÁ˽â¾öÐÔÄÜÎÊÌ⣬µ«²»µÃ²»Í²ÛÏ£¬Éè¼ÆµÄʵÔÚÊǺÜÄÑÓã¬ÎĵµÒ²ÓïÑɲ»Ïê¡£
uni-appÖ§³Ö½«WXS¡¢SJS¡¢Filter±àÒëµ½Õâ3¼ÒС³ÌÐòƽ̨£¬Í¬Ê±»¹ÔÚAppºÍH5ʵÏÖÁËWXSµÄ½âÎö¡£ÎªÊ²Ã´×öÕâЩÊ£¿Ò²ÊÇΪÁËÐÔÄÜ¡£
±ÈÈçuni-ui×é¼þ¿âÖеÄswiperaction×é¼þ£¬¾ÍÊÇÁбíÏîÏò×󻬶¯Ê±À³ö¼¸¸ö¼·Ñ¹Ê½Áª¶¯µÄ²Ëµ¥°´Å¥£¬ÕâÖÖÁ÷³©µÄ¸úÊÖ¶¯»£¬ÕýÊǽèÖúÓÚWXS»úÖÆÊµÏֵġ£
΢ÐÅΪºÎÒª´´ÔìWXS
WXS£¨WeiXin Script£©ÊÇ΢ÐÅ´´ÔìµÄÒ»Ì׽ű¾ÓïÑÔ£¬ËüµÄ¹Ù·½Ëµ·¨ÊÇ£º¡°WXS Óë JavaScript
ÊDz»Í¬µÄÓïÑÔ£¬ÓÐ×Ô¼ºµÄÓï·¨£¬²¢²»ºÍ JavaScript Ò»Ö¡±¡£
ÄÇ΢ÐÅΪºÎÒªÍÑÀë JavaScript £¬µ¥¶À´´ÔìÒ»Ì×ÓïÑÔÄØ£¿ÕâÒª´Ó΢ÐÅС³ÌÐòµÄµ×²ãÂß¼£¨ÔËÐл·¾³£©½²Æð¡£
С³ÌÐòµÄÔËÐл·¾³·ÖΪÂß¼²ãºÍÊÓͼ²ã£¬·Ö±ðÓÉ2¸öÏ̹߳ÜÀí£¬ÆäÖУº
WXML Ä£°åºÍ WXSS Ñùʽ¹¤×÷ÔÚÊÓͼ²ã£¬½çÃæÊ¹Óà WebView ½øÐÐäÖȾ
JavaScript´úÂ빤×÷ÔÚÂß¼²ã£¬ÔËÐÐÔÚJsCore»òv8Àï
С³ÌÐòÔÚÊÓͼ²ãÓëÂß¼²ãÁ½¸öÏ̼߳äÌṩÁËÊý¾Ý´«ÊäºÍʼþϵͳ¡£ÕâÑùµÄ·ÖÀëÉè¼Æ£¬´øÀ´ÁËÏÔ¶øÒ×¼ûµÄºÃ´¦£º -
Âß¼ºÍÊÓͼ·ÖÀ룬¼´Ê¹ÒµÎñÂß¼¼ÆËã·Ç³£·±Ã¦£¬Ò²²»»á×èÈûäÖȾºÍÓû§ÔÚÊÓͼ²ãÉϵĽ»»¥
µ«Í¬Ê±Ò²´øÀ´ÁËÃ÷ÏԵϵ´¦£º - ÊÓͼ²ã£¨webview£©Öв»ÄÜÔËÐÐJS£¬¶øÂß¼²ãJSÓÖÎÞ·¨Ö±½ÓÐÞ¸ÄÒ³ÃæDOM£¬Êý¾Ý¸üм°Ê¼þϵͳֻÄÜ¿¿Ï̼߳äͨѶ£¬µ«¿çÏß³ÌͨÐŵijɱ¾¼«¸ß£¬ÌرðÊÇÐèҪƵ·±Í¨Ðŵij¡¾°
ʲôÊÇÐèҪƵ·±Í¨Ñ¶µÄ³¡¾°£¿×îµäÐ͵ÄÀý×Ó¾ÍÊÇÓû§³ÖÐø½»»¥µÄÇé¿ö£¬±ÈÈç´¥Ãþ¡¢¹ö¶¯µÈ¡£ÎÒÃÇÒԲ໬²Ëµ¥ÎªÀý£¬¼ÙÉèÔÚÒ³ÃæÉÏ»¬¶¯AÔªËØ£¬ÒªÇóBÔªËØ¸úËæÒÆ¶¯£¬Ò»´Î»¬¶¯²Ù×÷£¨touchmove£©µÄÏìÓ¦¹ý³ÌÈçÏ£º
touchmove ʼþ´ÓÊÓͼ²ã£¨Webview£©´«µÝµ½Âß¼²ã£¬Öмä»áÓÉ΢Ðſͻ§¶Ë£¨Native£©×öÖÐת

Âß¼²ã´¦Àí touchmove ʼþ£¬¼ÆËãÐèÒÆ¶¯µÄλÖã¬È»ºóÔÙͨ¹ý setData ´«µÝµ½ÊÓͼ²ã£¬ÖмäͬÑù»áÓÉ΢Ðſͻ§¶Ë£¨Native£©×öÖÐת

Ò»´Î touchmove µÄÏìÓ¦ÐèÒª¾¹ý ÊÓͼ²ã¡¢Native¡¢Âß¼²ãÈýÕßÖ®¼ä2¸öÍêÕûÀ´»ØµÄͨÐÅ£¬Í¨ÐŵĺÄʱ¿ªÏú½Ï´ó£¬Óû§µÄ½»»¥¾Í»á³öÏÖÑÓʱ¿¨¶ÙµÄÇé¿ö¡£
³ýÁ˹ö¶¯¡¢Í϶¯½»»¥Í⣬ÔÚforÑ»·Àï¶ÔÊý¾Ý×ö¸ñʽÐ޸ģ¬Ò²»áÔì³ÉÂß¼²ãºÍÊÓͼ²ãƵ·±Í¨Ñ¶¡£
ÆäʵÕâÀàͨÐÅËðºÄÎÊÌ⣬ÔÚÒµÄÚÓÉÀ´ÒѾã¬react nativeºÍweex¶¼ÓÐÀàËÆÎÊÌ⣬weexÌṩÁËbindingxÀ´½â¾ö¡£
µ«¶ÔÓÚС³ÌÐòÀ´½²£¬ÕâÀàÎÊÌâ½â¾öÆðÀ´¸üÈÝÒס£ÒòΪÆäʵÊÓͼ²ãµÄwebview£¬ÊÇÓÐjs»·¾³µÄ£¬Ö»²»¹ý¹ýÈ¥²»¸ø¿ª·¢Õß¿ª·Å¡£
Èç¹ûÔÚÊÓͼ²ãµÄjsÖ±½Ó´¦Àí¹ö¶¯»òÍ϶¯½»»¥¡¢Ö±½Ó´¦ÀíÊý¾Ý¸ñʽ£¬¾ÍÄܱÜÃâ´óÁ¿Í¨ÐÅËðºÄ¡£
µ«¶ÔÓÚС³ÌÐòƽ̨¶øÑÔ£¬´óÁ¿¿ª·ÅwebviewÀïµÄjs±àд£¬Î¥·´ÁËËüµÄ³õÖÔ£¬±ÈÈ翪·¢Õß»áÖ±½Ó²Ù×÷dom£¬Ó°ÏìÐÔÄÜÌåÑé¡£ËùÒÔС³ÌÐòƽ̨Ìá³öÒ»ÖÖй淶£¬ÏÞÖÆwebviewÀï¿ÉÔËÐеÄjsµÄÄÜÁ¦¡£Õâ¾ÍÊÇwxs¡¢sjs¡¢filterµÄÓÉÀ´¡£
´Ó±¾ÖÊÀ´½²£¬wxs¡¢sjs¡¢filterÊÇÒ»ÖÖ±»ÏÞÖÆ¹ýµÄ¡¢ÔËÐÐÔÚÊÓͼ²ãwebviewÀïµÄjs¡£Ëü²¢²»ÊÇÕæµÄ·¢Ã÷ÁËÒ»ÖÖÐÂÓïÑÔ¡£
WXSÌØÕ÷¼°ÊÊÓó¡¾°
WXS¾ß±¸ÈçÏÂÌØÕ÷£º - WXSÊÇ¿ÉÒÔÔÚÊÓͼ²ã£¨webview£©ÖÐÔËÐеÄJS - WXSÎÞ·¨Ö±½ÓÐÞ¸ÄÒµÎñÊý¾Ý£¬½öÄÜÉèÖõ±Ç°×é¼þµÄclassºÍstyle£¬»òÕß¶ÔÊý¾Ý½øÐиñʽ»¯¡£ÒªÐÞ¸ÄÂß¼²ãµÄÊý¾Ý£¬ÐèҪͨ¹ý
callMethod£¬´«µÝ²ÎÊý¸øÂß¼²ã - WXSÊDZ»ÏÞÖÆ¹ýµÄJavaScript£¬¿ÉÒÔ½øÐÐһЩ¼òµ¥µÄÂß¼ÔËËã
- WXS¿ÉÒÔ¼àÌýtouchʼþ£¬´¦Àí¹ö¶¯¡¢Í϶¯½»»¥
¹Ê¿ÉÒԵóöWXSµÄÊÊÓó¡¾°£¬Ö÷Òª°üÀ¨£º - Óû§½»»¥Æµ·±¡¢½öÐè¸Ä¶¯×é¼þÑùʽ£¨±ÈÈç²¼¾ÖλÖã©£¬ÎÞÐè¸Ä¶¯Êý¾ÝÄÚÈݵij¡¾°£¬±ÈÈç²à»¬²Ëµ¥¡¢Ë÷ÒýÁÐ±í¡¢¹ö¶¯½¥±äµÈ
- Êý¾Ý¸ñʽ´¦Àí£¬±ÈÈçÎı¾¡¢ÈÕÆÚ¸ñʽ»¯£¬»òÕß¹ú¼Ê»¯¡£Í¨¹ýWXS¿ÉÒÔÄ£ÄâʵÏÖVue¿ò¼ÜµÄ¹ýÂËÆ÷,ÈçÏÂÊÇÒ»¸öͨ¹ýwxsʵÏÖÊ××Öĸ´óдµÄʾÀý£º
<wxs module="m1">
//Ê××Öĸ´óд
var capitalize = function(value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
module.exports = {
capitalize: capitalize
}
</wxs>
<view class="content">
<view class="text-area">
<!-- title Ϊµ±Ç°Ò³Ãæ data Öж¨ÒåµÄ³õʼÊý¾Ý -->
<text class="title">{{m1.capitalize(title)}}</text>
</view>
</view> |
uni-appÈçºÎÖ§³ÖWXS
uni-app×ñÑVueµ¥Îļþ×é¼þ£¨SFC£©¹æ·¶£¬×é¼þ/Ñùʽ/½Å±¾ÊÇдÔÚÒ»¸ö.vueÎļþÖе쬵«Î¢ÐÅС³ÌÐòÊǶàÎļþ·ÖÀ루wxml/wxss/js/json£©µÄ£¬ËùÒÔÔÚ΢ÐŶ˵ÄÖ÷Òª¹¤×÷ÊÇÀ©Õ¹vue-template-compiler£¬½âÎötemplate/style/script½Úµã£¬²¢ÕýÈ·Éú³Éµ½¶ÔÓ¦µÄwxml/wxss/jsÎļþÖУ¬¾ßÌå±àÒ빤×÷ÈçÏÂͼ£º

Tips-1£º¹ØÓÚ<wxs>±êÇ©ÖØ¹¹Îª<script lang="wxs">µÄ˵Ã÷£º
Òò.vueÎļþÖеÄ<wxs>±êÇ©¼°ÄÚǶWXS´úÂ룬ÔÚÖ÷Á÷ǰ¶Ë¿ª·¢¹¤¾ß£¨vscode/HBuilderXµÈ£©ÖУ¬¾ùÎÞ·¨ÊµÏÖÓï·¨Ìáʾ¡¢´úÂë¸ßÁÁ¼°¸ñʽ»¯£¬¹Êuni-app½«<wxs
module="m1">ÖØ¹¹Îª<script module="m1"
lang="wxs">£¬±ã½ÝʵÏÖÁËÓï·¨Ìáʾ¡¢´úÂë¸ßÁÁµÈ£¬ÈçÏÂΪvscode/HBuilderXÖжÔÓÚ<wxs>±êÇ©ÖØ¹¹Ç°ºóµÄ´úÂë¸ßÁÁ¶Ô±È£¬Ã÷ÏÔÖØ¹¹Îª<script
lang="wxs">ºó£¬¿ª·¢ÌåÑé¸ü¼Ñ£º

Tips-2£º¼øÓÚVueµÄ×Ô¶¨Òå±êÇ©¹æ·¶£¬ÎÒÃǽ¨Ò齫<wxs>£¨<script lang="wxs">£©ºÍtemplateƽ¼¶±àд
±àÒëÆ÷µÄ¾ßÌå½âÎöÀ©Õ¹¹¤×÷£¬ÕâÀï²»ÏêÊö£¬½ö¸ø³öwxsÉú³ÉµÄʾÀý´úÂ룬Èôó¼ÒÓиöÖ±¹ÛÀí½â£º
createFilterTag
(filterTag, {
content,
attrs
}) {
content = content.trim()
if (content) { //<wxs>±êÇ©ÄÚÖ±½Ó±àд wxs ´úÂë
return `<${filterTag} module="${attrs.module}">
${content}
</${filterTag}>`
} else if (attrs.src) { //ÍâÁª .wxs Îļþ
return `<${filterTag} src="${attrs.src}"
module="${attrs.module}"></${filterTag}>`
}
} |
ÔÚ±£Ö¤±àÒëÕýÈ·µÄÇé¿öÏ£¬Î¢ÐÅС³ÌÐòÔËÐÐʱ»áÕýÈ·½âÎö²¢Ö´ÐÐWXS½Å±¾£¬¿ò¼ÜruntimeÎÞÐè¸ÉÔ¤¡£
»ùÓÚ WXS ÌáÉýÐÔÄÜÌåÑéµÄʵÏÖʾÀý
ÏÂÃæµÄgifÏÔʾµÄÄÚÈÝ£¬ÊǽèÖú WXS ʵÏÖµÄÒ»¸öswipeaction×é¼þʾÀý£¬ÁбíÏîÏò×󻬶¯Ê±À³ö¼¸¸ö¼·Ñ¹Ê½Áª¶¯µÄ²Ëµ¥°´Å¥£¬¸úÊÖ¶¯»¡¢»Øµ¯¶¯»¶¼ºÜ×ÔÈ»Á÷³©¡£

ÕâÀï¼òµ¥¸ø³öÖ÷ҪʵÏÖ˼·£º
ÔÚ vue ÖÐÒýÓà wxs Îļþ£¬²¢°ó¶¨ touch ʼþ
<template>
<view class="uni-swipe_content">
<!-- ¿É»¬¶¯µÄ²Ëµ¥ÏîÈÝÆ÷£¬°ó¶¨touchʼþ -->
<view :data-position="pos" class="move-hock"
@touchstart="swipe.touchstart" @touchmove="swipe.touchmove"
@touchend="swipe.touchend" @change="change">
<view class="uni-swipe_box">
<slot />
</view>
<view class="uni-swipe_button-group
move-hock">
<!-- »¬¶¯ºó£¬ÓҲ༷ѹʽµÄÁª¶¯²Ëµ¥°´Å¥-->
<view v-for="(item,index) in options"
:data-button="btn" :key="index"
class="button-hock">
{{ item.text }}
</view>
</view>
</view>
</view>
</template>
<script module="swipe" lang="wxs"
src="./index.wxs"></script> |
ÔÚ wxs ÎļþÖУ¬´¦Àí touch ʼþÂß¼£¬Í¨¹ý translateX ÒÆ¶¯ÔªËØÎ»ÖÃ
function touchstart(e,
ins) {
//¼Ç¼¿ªÊ¼Î»Öü°¶¯»×´Ì¬
var pageX = e.touches[0].pageX;
....
} function touchmove(e, ownerInstance) {
var instance = e.instance;
var pageX = e.touches[0].pageX;//»ñÈ¡µ±Ç°Òƶ¯Î»ÖÃ
//¼ÆËãÆ«ÒÆÎ»ÖÃ
var x = Math.max(-instance.getState().position[1].width,
Math.min((value), 0));
//ÉèÖÃ×ó²àÔªËØÒÆ¶¯Î»ÖÃ
instance.setStyle({transform: 'translateX('
+ x + 'px)'}) //Ñ»·ÓҲ༷ѹʽÁª¶¯²Ëµ¥
var btnIns = ownerInstance.selectAllComponents('.button-hock');
for (var i = 0; i < btnIns.length; i++) {
...
//ÉèÖÃÿ¸öÁª¶¯²Ëµ¥µÄÒÆ¶¯Î»ÖÃ
btnIns[i].setStyle({transform: 'translateX('
+ (arr[i - 1] + value * (arr[i - 1] / position[1].width))
+ 'px)'})
...
}
} function touchend(e, ownerInstance) {
var instance = e.instance;
var state = instance.getState()
//¸ù¾Ýµ±Ç°Òƶ¯Î»Öã¬ÊµÏֲ˵¥ÏîµÄ×Ô¶¯Õ¹¿ª»ò»Øµ¯
move(state.left, -40, instance, ownerInstance)
} |
¸ÃʾÀýµÄÍêÕûÔ´Âë²Î¿¼github
ÔÚÕâ¶Î´úÂëÖУ¬ÏìÓ¦ÊÖÊÆ²¢Òƶ¯²Ëµ¥£¬ÊÇÔÚÊÓͼ²ãÖ±½ÓÍê³ÉµÄ¡£¶ø²»ÓÃwxsµÄ´«Í³Ð´·¨£¬ÊµÏÖÕâ¸ö¹¦ÄܾͻáºÜ¿¨¡£Ê×ÏÈÊÇÊÓͼ²ã½ÓÊÕµ½touchʼþ£¬È»ºó´«µÝ¸øÂß¼²ã£¬Âß¼²ãµÄjsÏìÓ¦touchʼþ£¬ÅжÏÒÆ¶¯¾àÀ룬ÔÙ֪ͨÊÓͼ²ã¸üнçÃæÔªËØµÄλÖá£ÔÚ³ÖÐøµÄÍ϶¯¹ý³ÌÖУ¬ÊÓͼ²ãºÍÂß¼²ã²»Í£½»»¥Í¨ÐÅ£¬ÎÞ·¨×öµ½¸úÊÖµÄ˳»¬¡£
ËäÈ»ÎÒÃÇÁ˽âÁËwxsµÄÔÀí£¬µ«ÀÏʵ½²£¬wxsͦÄÑÓõģ¬Ö±µ½ÏÖÔÚ£¬´ó¶àÊý¿ª·¢ÕßÈÔÈ»²»»áÓÃËü¡£±È½ÏºÏÊʵÄ×ö·¨£¬»¹ÊÇһЩ¿ò¼ÜµÄ×÷Õß¶ÔËü½øÐзâ×°¡£uni-appÌṩµÄuni-ui×é¼þ¿â£¬¾ÍÊÇÕâÑù×öµÄ£¬¿ª·¢ÕßÖ»ÐèÒª°´±ê×¼vue×é¼þµÄ·½Ê½È¥ÒýÓÃuni
uiµÄswiperaction×é¼þ£¬¾ÍÄܵõ½Á÷³©µÄ»¬¶¯¸úÊֲ˵¥¡£
¸ü¶àƽ̨µÄ¼æÈÝÐÔ
uni-appµÄApp¶ËÒ²ÊÇÒ»¸öС³ÌÐòÒýÇæ£¬ÎªÁËÔÚApp¶ËʵÏÖÁ÷³©µÄ¸úÊÖÍ϶¯£¬Ò²ÊµÏֺͼæÈÝÁËwxs¡£
ÆäʵH5ƽ̨µ¹²»´æÔÚÂß¼²ãºÍÊÓͼ²ãͨѶÕÛËðµÄÎÊÌ⣬µ«ÎªÁËÆ½Ì¨¼æÈÝÐÔÀÆë£¬uni-appÔÚH5¶ËҲʵÏÖÁËwxs»úÖÆ¡£
ÕâÑù±àдwxs´úÂ룬ÔÚuni-appÖпÉͬʱÔËÐÐÔÚApp¶Ë¡¢H5¶Ë¡¢Î¢ÐÅС³ÌÐò¶Ë¡£
°Ù¶ÈС³ÌÐòµÄFilter¹ýÂËÆ÷ºÍÖ§¸¶±¦Ð¡³ÌÐòµÄSJS£¬³ÉÊì¶È»¹±È½ÏµÍ£¬Ä¿Ç°Ö»ÄÜ´¦Àí»ù±¾µÄÊý¾Ý¸ñʽ¹ýÂË£¬»¹²»ÄÜÏìÓ¦touchµÈ½»»¥Ê¼þ¡£
ÖÁÓÚÍ·ÌõºÍQQС³ÌÐò£¬»¹²»Ö§³ÖÀàWXS»úÖÆ¡£
ÆÚ´ýÆäËûС³ÌÐòƽ̨¾¡¿ì²¹ÆëÕâ¸öÖØÒª¹¦ÄÜ£¬ÊµÏÖÌåÑéµÄÌáÉý¡£
uni-appĿǰҲ֧³Öµ¥¶À±àд°Ù¶ÈС³ÌÐòµÄFilter¹ýÂËÆ÷ºÍÖ§¸¶±¦Ð¡³ÌÐòµÄSJS£¬ÕâÁ½Öֽű¾ÎÞ·¨¿ç¶à¶Ë£¬½öÖ§³Ö×ÔÓÐÆ½Ì¨¡£¿ª·¢ÕßÈôÐèʹÓ㬿ɷֱð±àдwxs/filter/sjs½Å±¾£¬È»ºóÒÀ´Îͨ¹ýscriptÒýÓã¬uni-app±àÒëÆ÷»á¸ù¾ÝÄ¿±êƽ̨£¬·Ö±ð±àÒë·¢ÐУ¬ÈçÏÂΪʾÀý´úÂ룺
ʾÀý´úÂëÒªÓÐÌõ¼þ±àÒë
<!-- App/H5/΢ÐÅС³ÌÐòƽ̨µ÷ÓÃwxs½Å±¾
-->
<script module="utils" lang="wxs"
src="./utils.wxs"></script>
<!-- °Ù¶ÈС³ÌÐòƽ̨µ÷ÓÃfilter.js½Å±¾ -->
<script module="utils" lang="filter"
src="./utils.filter.js"></script>
<!-- Ö§¸¶±¦Ð¡³ÌÐòƽ̨µ÷ÓÃsjs½Å±¾ -->
<script module="utils" lang="sjs"
src="./utils.sjs"></script> |
ºóÐø
ÓÃÔËÐÐÔÚÊÓͼ²ãµÄjs½â¾öͨѶ×èÈû£¬¿ÉÄܺܶàÈ˶¼Ã»Òâʶµ½¡£Ï£Íû±¾ÎÄÄܸø´ó¼Ò½â»ó£¬½â¿ªWXSÖ®ÃÕ¡£
ÆäʵС³ÌÐòµÄÐÔÄÜÌåÑéÓÅ»¯£¬ÈÔÈ»ÓдóÁ¿¿Õ¼ä |