小程序开发工具--详情--本地设置--启用自定义处理命令
用来执行脚本
为了提升用户 *** 作的流畅性,同时让用户在微信内拥有一致的 *** 作体验,“右滑手势返回”将成为基础配置,即所有小程序内都可以从屏幕左侧边缘向右滑动返回上一个界面。 在即将发布的705客户端版本中,页面配置中的 disableSwipeBack 属性将不再生效,请开发者及时调整。
背景图为fixed, top随滚动而改变 。 重点就是 onPageScroll 。
还可使用 scroll-view 的下拉刷新,且可以自定义样式。
用wxs监听滚动事件,设置样式。
不在以下 request 合法域名列表中,请参考文档
解决方案:在详情--本地设置中勾选“不校验合法域名。。。”
mode widthFix 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变。应避免使用widthFix,尽量指定宽高。
导航栏高度
iOS 44px (4+32+8)
android 48px (8+32+8)
胶囊与状态栏间距(应该计算得出)ios 4px,Android 8px,与导航栏底边距8px(只能取固定值)。
胶囊高度 32px
状态栏高度,刘海屏通常为44px
setData 是小程序开发中使用最频繁、也是最容易引发性能问题的接口。
因此,开发者在调用 setData 时要注意:
数组索引不能直接用变量,解决方案:
取原来的值:
在onUnload中取消timer
微信小程序中,可以用 hover-class 属性来指定元素的点击态效果。但是在在使用中要注意,大部分组件是不支持该属性的。
目前支持 hover-class 属性的组件有三个:view、button、navigator。
不支持 hover-class 属性的组件,同时也不支持 hover-stop-propagation、hover-start-time、hover-stay-time 这三个属性。
如果background写在wxml中,那么background-size也要写在style中,如果写在wxss中不会生效。
获取系统屏幕边框的安全距离:
safe-area-inset-top
safe-area-inset-right
safe-area-inset-bottom
safe-area-inset-left
ios11:constant(safe-area-inset-bottom)
ios112:env(safe-area-inset-bottom)
scroll-view的子元素最好包一层,不然宽度可能不起作用。
当小程序使用页面进行滚动时,可以给遮罩设置catchtouchmove属性来禁止页面滚动
在微信小程序中,我们经常会使用thissetData来修改数据,但有时候发现,this拿不到,到底是为什么呢?
当我们通过wxrequest请求网络数据成功后绑定数据时候报以下错误
这是因为this作用域指向问题 ,success函数实际是一个闭包 , 无法直接通过this来setData
方法一:保留this的副本that
方法二:回调函数使用函数声明(箭头函数)的写法
从上面情景中我们发现,问题主要出现在调用接口的回调函数中,所以我们在success或者fail回调函数中要setData的时候,就要选择其中一种方式来避免this丢失
根据导出的GPX文件,在地图上绘制其路径轨迹。
GPX: the GPS Exchange Format
GPX (GPS交换格式)是一种轻量级XML数据格式,用于在互联网上的应用程序和Web服务之间交换GPS数据(路径、路由和跟踪)。
在线XML转JSON - BeJSON
为了方便后续绑定使用,转换后批量将“lat”替换为“latitude”、“lon”替换为“longitude”。
将转换后的JSON文件部署到本地服务器,先进行本地测试。
通过 wxrequest 获取数据: 微信小程序通过api接口将json数据展现到小程序示例
使用本地链接进行测试会报错,需要将项目设置里勾选上“不校验”: 微信小程序 微信小程序连接本地接口
本地测试没问题后,将文件部署到外网环境,改下url就可以了。
由于数据格式已经与小程序要求的一致了,直接将其赋给对应的Key即可。
需要注意的是,在 wxrequest 回调里直接使用 thissetData 会报错: 微信小程序中this指向作用域问题thissetData is not a function报错 。
至此,已基本满足预研需求,后续开发具体功能时会方便不少啦 ~ O(∩_∩)O ~
如果能够显示 卫星地图 就完美了,不过还没找到好的解决方案,留作另一个问题吧,TX不开放也没办法了。
<button bindtap="powerDrawer" type="primary" size="mini" style="width: 55%;" data-statu="open">中奖记录</button>
<!-- 中间名单d窗 -->
<view class="drawer_div">
<view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if="{{showModalStatus}}"></view>
<view animation="{{animationPrize}}" class="drawer_box" wx:if="{{showModalStatus}}">
<view class="drawer_title">
中奖记录
<image src="/img/x@2xpng" bindtap="powerDrawer" data-statu="close"></image>
</view>
<view class="drawer_content">
<view class="top grid">
<text>
名称:啦啦啦啦啦啦啦啦
</text>
<text>
时间:2020-02-20
</text>
</view>
<view class="top grid">
<text>
名称:啦啦啦啦啦啦啦啦
</text>
<text>
时间:2020-02-20
</text>
</view>
</view>
</view>
</view>
drawer_screen {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
background: #000;
opacity: 05;
overflow: hidden;
}
/content/
drawer_box {
width: 650rpx;
overflow: hidden;
position: fixed;
top: 50%;
left: 0;
z-index: 1001;
background: #FAFAFA;
margin: -150px 50rpx 0 50rpx;
border-radius: 3px;
}
drawer_title{
padding:30rpx 20rpx;
font-size: 36rpx;
text-align: center;
position: relative;
}
drawer_title image{
display: inline-block;
width: 30rpx;
height: 30rpx;
position: absolute;
right: 9px;
top: 10px;
}
drawer_content {
height: 210px;
overflow-y: scroll; /超出父盒子高度可滚动/
padding: 0 20rpx;
}
top{
display: flex;
justify-content: space-between;
border-bottom: 1px dashed #ccc;
}
top text{
display: inline-block;
height: 60rpx;
line-height: 20rpx;
}
data: {
animationPrize: {},
}
powerDrawer: function (e) {
// consolelog(e);
let currentStatu = ecurrentTargetdatasetstatu;
thisutil(currentStatu);
},
util: function (currentStatu) {
/ 动画部分 /
// 第1步:创建动画实例
var animation = wxcreateAnimation({
duration: 200, //动画时长
timingFunction: "linear", //线性
delay: 0 //0则不延迟
});
// 第2步:这个动画实例赋给当前的动画实例
thisanimation = animation;
// 第3步:执行第一组动画
animationopacity(0)rotateX(-100)step();
// 第4步:导出动画对象赋给数据对象储存
thissetData({
animationPrize: animationexport()
})
// 第5步:设置定时器到指定时候后,执行第二组动画
setTimeout(function () {
// 执行第二组动画
animationopacity(1)rotateX(0)step();
// 给数据对象储存的第一组动画,更替为执行完第二组动画的动画对象
thissetData({
animationPrize: animation
})
//关闭
if (currentStatu == "close") {
thissetData({
showModalStatus: false
});
}
}bind(this), 200)
// 显示
if (currentStatu == "open") {
thissetData({
showModalStatus: true
});
}
},
redirectTo :关闭当前页(卸载),跳转到指定页
navigateTo :保留当前页(隐藏),跳转到指定页
switchTap :只能用于跳转到tabbar页面,并关闭其他非tabbar页面,tabbar之间做切换
注意:switchTab只能跳转到带有tab的页面,不能跳转到不带tab的页面!
list页面:
detail页面:
eventtarget指的是当前点击的组件
eventcurrentTarget指的是事件捕获的组件
bindchange 这个事件官方文档中没有写,效果基本和 bindblur 一样,但失去焦点时不会被重复触发,所以一般还是采用 bindblur
小程序对于全局 wxss 组件的继承只能继承 font 以及 color 类型
bind事件绑定不会阻止冒泡事件,而catch会阻止冒泡事件,看官方文档有介绍
在指定的css属性最后带上 ! important 能够加强属性的优先级
wxs 只是与 JavaScript 相似,并非 JavaScript ,所以无法定义 const 常量,得用 var
wxs 存在的意义就是充当 compute/filter 这类功能。
且当使用 wxs 进行数据绑定时,要注意 setData 出来的数据的二次读取,
因为 setData 之前首先会进行一次初始化
wxs编写 :
wxml使用 :
关于 thisdata 与 thissetData 的使用细节
thisdata 使用于同步 *** 作(如 onLoad 加载),而 thissetData 适用于异步 *** 作(如 wxrequest )
<Tabs aaa="123> </Tabs>
properties:{
aaa:{
type:String,
value:"123"
}
}
<Tabs binditemChange="handleItemChange"> </Tabs>
handleItemChange(e){
const {index}=edetail
let {list} =thisdata
}
listforEach((a,b)=>b===indexaisActive=true:aisActive=false)
thissetData({
list
})
const {index} =ecurrentTargetdataset
触发父组件中的自定义事件,同时传递数据给父组件
thistriggerEvent('父组件自定义事件的名称',要传递的参数)
thistriggerEvent("itemChange",{index})
今天开始学微信小程序,做了一个简单的todolist小demo,先上效果图
wxml文件:
js文件:
wxss文件:
特别注意的时,微信小程序没有像vue那样可以双向数据绑定,它是通过 thissetData() 来把变量渲染到视图层,所以这里要特别注意它的使用
wxs脚本存在的意义是因为小程序的渲染机制决定的。小程序的webview 与 js逻辑渲染的分离导致小程序在某些场景需要高频触发thissetData() 时会出现卡顿现象,为了解决卡顿场景wxs 脚本顺势而生。
官方介绍:
wxs脚本的解决方案:wxs脚本是运行在wxml视图层的,避开了跨线程通信的成本。wxs可以直接 *** 作wxml的视图元素,也可以充当类似vue 中computed的角色来格式化数据,减少调用thissetData()的次数,减少性能损耗。
wxs 需要注意的是只能通过consolelog()来调试脚本,无法通过debugger和断点进行。
使用实例详看官方文档( >
以上就是关于小程序备忘全部的内容,包括:小程序备忘、微信小程序的this和that的用法、【小程序】地图|绘制GPX轨迹等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)