微信小程序中wxs文件的一些妙用分享


Posted in Javascript onFebruary 18, 2022

前言

wxs文件是小程序中的逻辑文件,它和wxml结合使用。

不同于js, wxs可以直接作用到视图层,而不需要进行视图层和逻辑层的setData数据交互;

因为这个特性,wxs非常适合应用于优化小程序的频繁交互操作中;

应用

过滤器

在IOS环境中wxs的运行速度要远高于js,在android中两者表现相当。

使用wxs作为过滤器也可以一定幅度提升性能;让我们来看一个过滤器来了解其语法。

wxs文件:

var toDecimal2 = function (x) {
  var f = parseFloat(x);
  if (isNaN(f)) {
    return '0.00'
  }
  var f = Math.round(x * 100) / 100;
  var s = f.toString();
  var rs = s.indexOf('.');
  if (rs < 0) {
    rs = s.length;
    s += '.';
  }
  while (s.length <= rs + 2) {
    s += '0';
  }
  return s;
}
module.exports = toDecimal2

上面的代码实现了数字保留两位小数的功能。

wxml文件:

<wxs src="./filter.wxs" module="filter"></wxs>
<text>{{filter(1)}}</text>

基本语法:在视图文件中通过wxs标签引入,module值是自定义命名,之后在wxml中可以通过filter调用方法

上面的代码展示了 wxs的运行逻辑,让我们可以像函数一样调用wxs中的方法;

下面再看一下wxs针对wxml页面事件中的表现。

拖拽

使用交互时(拖拽、上下滑动、左右侧滑等)如果依靠js逻辑层,会需要大量、频繁的数据通信。卡顿是不可避免的;

使用wxs文件替代交互,不需要频繁使用setData导致实时大量的数据通信,从而节省性能。

下面展示一个拖拽例子

wxs文件:

function touchstart(event) {
  var touch = event.touches[0] || event.changedTouches[0]
  startX = touch.pageX
  startY = touch.pageY
}

事件参数event和js中的事件event内容中touches和changedTouches属性一致

function touchmove(event, ins) {
  var touch = event.touches[0] || event.changedTouches[0]
  ins.selectComponent('.div').setStyle({
    left: startX - touch.pageX + 'px',
    top: startY - touch.pageY  + 'px'
  })
}

ins(第二个参数)为触发事件的视图层wxml上下文。可以查找页面所有元素并设置style,class(足够完成交互效果)

注意:在参数event中同样有一个上下文实例instance;event中的实例instance作用范围是触发事件的元素内,而事件的ins参数作用范围是触发事件的组件内。

module.exports = {
  touchstart: touchstart,
  touchmove: touchmove,
}

最后将方法抛出去,给wxml文件引用。

wxml文件

<wxs module="action" src="./movable.wxs"></wxs> 
<view class="div" bindtouchstart="{{action.touchstart}}" bindtouchmove="{{action.touchmove}}"></view>

上面的例子,解释了事件的基本交互用法。

文件之中相互传参

在事件交互中,少不了需要各个文件之中传递参数。 下面是比较常用的几种

wxs传参到js逻辑层

wxs文件中:

var dragStart = function (e, ins) {
	ins.callMethod('callback','sldkfj')
}

js文件中:

callback(e){
	console.log(e)
}
// sldkfj

使用callMethod方法,可以执行js中的callback方法。也可以实现传参;

  • !!!callMethod不支持传回调函数*

js逻辑层传参到wxs文件

js文件中:

handler(e){
	this.setData({a:1})
}

wxml文件:

<wxs module="action" src="./movable.wxs"></wxs> 
<view change:prop="{{action.change}}" prop="{{a}}"></view>

wxs文件中:

change(newValue,oldValue){}

js文件中的参数传递到wxs需要通过wxml文件中转。

js文件触发handler事件,改变a的值之后,最新的a传递到wxml中。

wxml中prop改变会触发wxs中的change事件。change中则会接收到最新prop值

wxs中获取dataset(wxs中获取wxml数据)

wxs中代码

var dragStart = function (e) {
  var index = e.currentTarget.dataset.index;
  var index = e.instance.getDataset().index;
}

上面有提到e.instance是当前触发事件的元素实例。

所以e.instance.getDataset()获取的是当前触发事件的dataset数据集

注意点

wxs和js为不同的两个脚本语言。但是语法和es5基本相同,确又不支持es6语法; getState 在多元素交互中非常实用,欢迎探索。

不知道是否是支持的语法可以跳转官网文档; wxs运算符、语句、基础类库、数据类型

总结

到此这篇关于微信小程序中wxs文件的一些妙用的文章就介绍到这了,更多相关微信小程序wxs文件妙用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
firefo xml 读写实现js代码
Jun 11 Javascript
jQuery实现图片信息的浮动显示实例代码
Aug 28 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
超棒的响应式布局jQuery插件Freetile.js
Nov 17 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
微信小程序 五星评分的实现实例
Aug 04 Javascript
基于ajax和jsonp的原生封装(实例)
Oct 16 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
Vue项目总结之webpack常规打包优化方案
Jun 06 Javascript
vue 使用原生组件上传图片的实例
Sep 08 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
Dec 05 Javascript
vue项目支付功能代码详解
Feb 18 #Vue.js
JavaScript的Set数据结构详解
Feb 18 #Javascript
JS封装cavans多种滤镜组件
HTML+JS实现在线朗读器
Feb 15 #Javascript
js中Map和Set的用法及区别实例详解
Feb 15 #Javascript
canvas实现贪食蛇的实践
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
You might like
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
jQuery load方法用法集锦
2011/12/06 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
Javascript中Promise的四种常用方法总结
2017/07/14 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
9种python web 程序的部署方式小结
2014/06/30 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
django表单的Widgets使用详解
2019/07/22 Python
python3中rank函数的用法
2019/11/27 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
C语言中break与continue的区别
2012/07/12 面试题
校园餐饮创业计划书
2014/01/10 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
小班下学期个人总结
2015/02/12 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL