什么是理疗| 万宝龙手表什么档次| 耳堵是什么| 英纳格手表什么档次| 一路向北是什么意思| 靥是什么意思| 阳是什么意思| 吃什么排出全身毒素| 大腿肌肉疼是什么原因| 减肥平台期什么意思| 1975年属兔的是什么命| 全身发烫但不发烧是什么原因| 脑缺血吃什么药| 孕妇贫血吃什么好| 嘴唇发乌是什么原因| 上感是什么意思| 描述是什么意思| 64年属什么生肖| 做爱什么姿势最舒服| 赤者念什么| 什么姿势最爽| 补肾固精吃什么药好| 特首是什么意思| 黄花鱼是什么鱼| 雌激素是什么东西| 什么什么不已| 关东煮为什么叫关东煮| 鹿茸是鹿的什么部位| 六月份适合种什么菜| 吃什么去黄褐斑最有效| 樱桃什么时候成熟| 湿热是什么意思| fasola是什么品牌| 百香果有什么功效与作用| 假花放在家里有什么忌讳| 周海媚什么病| 为什么最近一直下雨| 胸口闷疼是什么原因| 产检挂什么科室| 眼干是什么原因| 人格什么意思| 大生化检查能查出什么病来| 室上速是什么原因导致的| 身份证拍照穿什么衣服| 打嗝什么原因| damon英文名什么寓意| 枕芯是什么| 挑疳积挑出来的是什么| 男蛇配什么属相最好| 湿热喝什么茶可以调理| 胆囊壁结晶是什么意思| 二手房是什么意思| 个性是什么意思| 什么花好养| 蛋白粉是什么| 吐槽是什么意思| 黑玫瑰代表什么意思| 六月初四是什么星座| 什么叫遗精| 雌二醇是什么| 周公解梦梦见蛇是什么意思| 颈椎疼吃什么药| 卧推80公斤什么水平| 肩胛骨疼痛是什么原因| 武昌鱼是什么鱼| 眼睛干痒用什么眼药水| 闪失是什么意思| 胃寒吃什么好| 急忙的反义词是什么| 肚子疼呕吐是什么原因引起的| 洒水车的音乐是什么歌| 出汗有什么好处| aone是什么牌子| 水淀粉是什么| 宫腔内偏强回声是什么意思| qr是什么意思| 宝五行属什么| 灵芝泡酒有什么功效| 马来酸曲美布汀片什么时候吃| knee是什么意思| 柠檬泡蜂蜜有什么功效| ards是什么病| 什么样人不能吃海参| 艾滋病通过什么传播| 快餐是什么意思| 左心室肥大是什么意思| 吃什么瘦肚子| 川芎治什么病最好| 公鸡为什么会打鸣| 喉咙长溃疡是什么原因| 背叛什么意思| 蹦蹦跳跳的动物是什么生肖| 正常白带是什么颜色| 星期三打喷嚏代表什么| 关节疼是什么原因| 主动脉迂曲是什么意思| 64年出生属什么| 流产后吃什么水果最佳| 来月经可以吃什么| 共情能力是什么意思| 齿痕舌吃什么中成药| 未见明显胚芽是什么意思| 白鸭是什么鸭| 87年属于什么生肖| 喝酸奶有什么好处| 什么是猝死| 白兰地是什么酒| 静脉曲张是什么原因| 井代表什么数字| 池塘里有什么| 阴囊潮湿吃什么药| 舌中间有裂纹是什么原因| 没有子宫有什么影响| 生蛇是什么病| 打酱油是什么意思| 苋菜与什么食物相克| 金银花什么时候采摘最好| 白带黄色是什么原因| 深喉是什么意思| 荣辱与共是什么意思| 什么是辛辣刺激性食物| 羊与什么相冲| burberry是什么品牌| 什么是碱性食物有哪些| 2月13号是什么星座| 早搏吃什么药最好| 春天开什么花| 必修课是什么意思| 什么的清香| 2049年是什么年| 750金是什么金| 欧代是什么| 不期而遇什么意思| 胃绞疼是什么原因| 血氧是什么意思| 伟岸一般形容什么人| 慢心律又叫什么药| 兼得是什么意思| 梅雨季节是什么时间| 37岁属什么的生肖| 12月10日什么星座| 山羊吃什么| 门可罗雀是什么意思| 心脏早搏是什么原因| 抑郁到什么程度要吃氟西汀| 为什么身上会出现淤青| bnp是什么| 单招是什么学历| 核素是什么| 女生diy什么意思| 鬼剃头是因为什么原因引起的| 尿赤是什么意思| 肾结石可以吃什么水果| 高考什么时候恢复| 作奸犯科是什么意思| 阴虱用什么药可以根除| 心脏跳的慢吃什么好| 属鼠适合佩戴什么饰品| 为什么青霉素要做皮试| 2月22日什么星座| 芍药什么时候开花| 难以启齿什么意思| 小腹凸起是什么原因| wt是什么意思| 肝血不足吃什么药| 咳嗽有黄痰吃什么消炎药| 扁尖是什么| 身怀六甲是什么意思| 什么水果可以减肥刮油脂| 爷爷的妹妹叫什么| 月经没来吃什么药可以催月经来| 沉积是什么意思| 金钱能买来什么但买不来什么| 南乳和腐乳有什么区别| 爱我永不变是什么歌| 蚕蛹过敏什么办法最快| 8月6日什么星座| 类风湿不能吃什么东西| 春什么秋什么| 零反式脂肪是什么意思| 寂寞的反义词是什么| 月经期喝红糖水有什么好处| 点蜡烛什么意思| apk是什么格式| 什么药膏能让疣体脱落| 爱出者爱返福往者福来什么意思| 内衣34是什么码| 慢性荨麻疹是什么症状| 尿失禁吃什么药| 乳腺挂什么科| 坐骨神经痛是什么原因引起的| 一什么羊| 用减一笔是什么字| 卡路里是什么| 什么是破窗效应| 8月30号什么星座| 印度是什么教| 用什么可以解开所有的谜| 阴道炎挂什么科| 衬衫搭配什么裤子好看| 七岁属什么生肖| 幽门螺杆菌怕什么食物| 换什么机油好| 14年属什么| 为什么梦不到死去的亲人| 什么是重水| 头晕目眩吃什么药| 感受是什么意思| 牡丹花什么季节开| 南瓜和窝瓜有什么区别| 为什么做着做着就软了| pp是什么材质| 天空像什么的比喻句| 儿童吃手指是什么原因| 用脚尖走路有什么好处| 恋童癖是什么意思| 脚后跟干裂起硬皮用什么药| 事宜什么意思| 女字五行属什么| 搬迁送什么礼物好| 中央政法委书记什么级别| 发烧不退烧是什么原因| 什么是柏拉图式的爱情| 凿壁偷光形容什么| 马和驴为什么能杂交| 蒸馏水是什么水| 什么是老赖| 猫有什么病会传染给人| 白事是什么意思| 支气管炎是什么| 空泡蝶鞍是什么病| 性生活有什么好处| 奶茶里面的珍珠是什么做的| 狗狗犬窝咳吃什么药| 为什么医院不用咳特灵| 转氨酶高是什么意思| 喉炎吃什么药最有效| 皮下男是什么意思| 遇难呈祥是什么生肖| pcl是什么意思| 猎德村为什么那么有钱| 痔疮为什么会出血| 为什么会得肠胃炎| 乌龟吃什么| 鸡血藤长什么样子图片| 12月24号是什么星座| 健脾胃吃什么药| 九月七日是什么星座| 来月经不能吃什么水果| 幸福是什么的经典语录| 谁也不知道下一秒会发生什么| 无量寿经讲的是什么| 耳道炎是什么原因引起的| 产后恶露是什么| 深棕色是什么颜色| 喝酒头晕是什么原因| 大林木命适合做什么行业| 15天来一次月经是什么原因| bpa是什么材料| 暑假是什么时候放假| 打喷嚏预示什么| 牙龈出血用什么药| 雪菜是什么菜| 长期喝豆浆有什么好处和坏处| 百度

奥森春季半程马拉松开跑

百度 1993年政府机构改革的一项重要改革任务是压缩甚至撤销工业专业经济部门,但从实践看,能源部和机械电子部本来是1988年改革由多个部门合并而来的,这一次又被拆成机械部和电子部、电力部和煤炭部。

基础库 2.4.4 开始支持,低版本需做兼容处理

# 背景

有频繁用户交互的效果在小程序上表现是比较卡顿的,例如页面有 2 个元素 A 和 B,用户在 A 上做 touchmove 手势,要求 B 也跟随移动,movable-view 就是一个典型的例子。一次 touchmove 事件的响应过程为:

a、touchmove 事件从视图层(Webview)抛到逻辑层(App Service)

b、逻辑层(App Service)处理 touchmove 事件,再通过 setData 来改变 B 的位置

一次 touchmove 的响应需要经过 2 次的逻辑层和渲染层的通信以及一次渲染,通信的耗时比较大。此外 setData 渲染也会阻塞其它脚本执行,导致了整个用户交互的动画过程会有延迟。

# 实现方案

本方案基本的思路是减少通信的次数,让事件在视图层(Webview)响应。小程序的框架分为视图层(Webview)和逻辑层(App Service),这样分层的目的是管控,开发者的代码只能运行在逻辑层(App Service),而这个思路就必须要让开发者的代码运行在视图层(Webview),如下图所示的流程:

使用 WXS 函数用来响应小程序事件,目前只能响应内置组件的事件,不支持自定义组件事件。WXS 函数的除了纯逻辑的运算,还可以通过封装好的ComponentDescriptor 实例来访问以及设置组件的 class 和样式,对于交互动画,设置 style 和 class 足够了。WXS 函数的例子如下:

var wxsFunction = function(event, ownerInstance) {
    var instance = ownerInstance.selectComponent('.classSelector') // 返回组件的实例
    instance.setStyle({
        "font-size": "14px" // 支持rpx
    })
    instance.getDataset()
    instance.setClass(className)
    // ...
    return false // 不往上冒泡,相当于调用了同时调用了stopPropagation和preventDefault
}

其中入参 event 是小程序事件对象基础上多了 event.instance 来表示触发事件的组件的 ComponentDescriptor 实例。ownerInstance 表示的是触发事件的组件所在的组件的 ComponentDescriptor 实例,如果触发事件的组件是在页面内的,ownerInstance 表示的是页面实例。

ComponentDescriptor的定义如下:

方法 参数 描述 最低版本
selectComponent selector对象 返回组件的 ComponentDescriptor 实例。
selectAllComponents selector对象数组 返回组件的 ComponentDescriptor 实例数组。
setStyle Object/string 设置组件样式,支持rpx。设置的样式优先级比组件 wxml 里面定义的样式高。不能设置最顶层页面的样式。
addClass/removeClass/hasClass string 设置组件的 class。设置的 class 优先级比组件 wxml 里面定义的 class 高。不能设置最顶层页面的 class。
getDataset 返回当前组件/页面的 dataset 对象
callMethod (funcName:string, args:object) 调用当前组件/页面在逻辑层(App Service)定义的函数。funcName表示函数名称,args表示函数的参数。
requestAnimationFrame Function 和原生 requestAnimationFrame 一样。用于设置动画。
getState 返回一个object对象,当有局部变量需要存储起来后续使用的时候用这个方法。
triggerEvent (eventName, detail) 和组件的triggerEvent一致。
getComputedStyle Array.<string> 参数与 SelectorQuerycomputedStyle 一致。 2.11.2
setTimeout (Function, Number) 与原生 setTimeout 一致。用于创建定时器。 2.14.2
clearTimeout Number 与原生 clearTimeout 一致。用于清除定时器。 2.14.2
getBoundingClientRect webview: 无
skyline: (rect: BoundingClientRect) => void
webview 中,返回值与 SelectorQueryboundingClientRect 一致;
skyline 中此调用无法同步返回,会以回调形式异步返回
2.14.2

WXS 运行在视图层(Webview),里面的逻辑毕竟能做的事件比较少,需要有一个机制和逻辑层(App Service)开发者的代码通信,上面的 callMethod 是 WXS 里面调用逻辑层(App Service)开发者的代码的方法,而 WxsPropObserver 是逻辑层(App Service)开发者的代码调用 WXS 逻辑的机制。

# 使用方法

  • WXML定义事件:
<wxs module="test" src="./test.wxs"></wxs>
<view change:prop="{{test.propObserver}}" prop="{{propValue}}" bindtouchmove="{{test.touchmove}}" class="movable"></view>

上面的change:prop(属性前面带change:前缀)是在 prop 属性被设置的时候触发 WXS 函数,值必须用{{}}括起来。类似 Component 定义的 properties 里面的 observer 属性,在setData({propValue: newValue})调用之后会触发。

注意:WXS函数必须用{{}}括起来。当 prop 的值被设置 WXS 函数就会触发,而不只是值发生改变,所以在页面初始化的时候会调用一次WxsPropObserver的函数。

  • WXS文件test.wxs里面定义并导出事件处理函数和属性改变触发的函数:
module.exports = {
    touchmove: function(event, instance) {
        console.log('log event', JSON.stringify(event))
    },
    propObserver: function(newValue, oldValue, ownerInstance, instance) {
        console.log('prop observer', newValue, oldValue)
    }
}

更多示例请查看在开发者工具中预览效果

# Tips

  1. 目前还不支持原生组件的事件、inputtextarea组件的 bindinput 事件
  2. 1.02.1901170及以后版本的开发者工具上支持交互动画,最低版本基础库是2.4.4
  3. 目前在WXS函数里面仅支持console.log方式打日志定位问题,注意连续的重复日志会被过滤掉。
牛油果是什么季节的水果 五什么十什么成语 预拌粉是什么东西 老年人腿无力是什么原因导致的 血糖高饮食需要注意什么
天外有天人外有人是什么意思 梦见雪地是什么征兆 供血不足吃什么药好 白发用什么染发最安全 5月8日是什么星座
脑梗做什么检查 那天午后我站在你家门口什么歌 什么的口罩 黄花菜不能和什么一起吃 什么是福报
孩子咳嗽能吃什么水果 煜字五行属什么 灰指甲用什么药膏 饭后烧心是什么原因引起的 万能输血者是什么血型
康乃馨适合送什么人beikeqingting.com 给男朋友买什么礼物比较好kuyehao.com 汉堡是什么意思hcv9jop6ns9r.cn 周杰伦有什么病hcv8jop1ns2r.cn 什么水果通便hcv9jop4ns1r.cn
氧分压高是什么原因hcv9jop2ns1r.cn 龙跟什么生肖最配hcv8jop5ns2r.cn 把脉能看出什么hcv9jop1ns3r.cn 盐碱地适合种什么农作物hcv8jop1ns0r.cn 手指爆皮是什么原因hcv8jop4ns5r.cn
拉肚子吃什么水果hcv9jop2ns4r.cn 禾五行属什么hcv9jop4ns6r.cn 减肥可以吃什么主食hcv9jop5ns0r.cn 治便秘吃什么hcv9jop6ns5r.cn 为什么辰不能见亥hcv8jop7ns9r.cn
凌晨的凌是什么意思hcv9jop4ns1r.cn acg文化是什么意思hcv8jop0ns2r.cn 梦见挖野菜是什么意思hcv8jop3ns3r.cn 丝瓜不能和什么食物一起吃hcv8jop4ns6r.cn 脱皮缺什么维生素hanqikai.com
百度