/* 公共样式 */
page{
height: 100%;
background: #f7f7f7;
}
view,image,input,text,button,textarea {
box-sizing: border-box;
margin: 0;
padding: 0;
font-size: 0;
}
input,textarea{
outline: none;
border: none;
}
<text class="video_title">
{{lisVidindex !=='' ? listData[lisVidindex].name:'暂无视频'}}
</text>
注意:!=’‘和!==’‘的结果不同,!=’‘会把0也包含在内,让你损index=0的数据
-
自定义微信小程序的swiper
通过改变当前的current--当前所在滑块的 index来实现!其他功能相同原理!
-
网页版样式变化一般通过jq添加类或者动画,微信小程序不能使用jq,所以通过布尔值控制状态来添加类名,需要、动画可以使用@key关键帧{{iszfmodal?‘mdlbox_show’:‘mdlbox_hide’}}
-
获取最新的数据使用this.setdata()的回调函数/this.setdata()异步问题
this.setData({
//...
},() => {你获取最新数据要干的事情、调去某个函数}
})
/* 动画 */
//xx.wxss
.antonaimate需要加的动画{
opacity: 0;
transform: translateX(-40rpx) !important;
/* transition: all 0.3s linear; */
}
.tab_item_content需要加动画的类{
transform: translateX(0);
transition: all 0.3s linear;
}
// xx.wxml
<view class="tab_item_content {{isopacity?'antonaimate':''}}">
一些需要动画的内容
</view>
//xx.js
onChangCyTab(optain){
let that = this;
that.setData({isopacity:true},()=>{
setTimeout(()=>{ that.setData({isopacity:false})},500);
//改变文案、手机展示、小tab选项
})
},
//其实就是兼容问题
-webkit-backface-visibility: hidden;
-webkit-transform: translate3d(0, 0, 0);
-
video控件属性不起作用(查了好多帖子qaq)
如:微信小程序video隐藏状态栏
需要在xx.js的data里设置属性的变量值再赋值过去,直接在wxml里写属性值如false无效 -
微信小程序禁止page或者其他标签滚动
//xx.js
//禁止page滚动,给你调用的函数方法加
wx.setPageStyle({
style: {
overflow: 'hidden'
}
})
//xx.wxml
//禁止不含滚动需求的标签滚动,给标签加行内属性
<view catchtouchmove="ture">
<view data-xxx="{{item.title}}" bindtap="goPage">{{item.title}}</view>
//xx.js
goPage(e){
console.log(e,'ppp')
let value = e.currentTarget.dataset.xxx;
}
给swiper添加该方法bindchange
<view style="width:{{comment_list.avg_fenshu*20}}%;"></view>
<view wx:for="{{list}}" wx:if="{{index <3}}" wx:key="index">
</view>
wx.setNavigationBarTitle({
title: 'xxxxx公司' //页面切换,更换页面标题
})
微信小程序里换行符不管用,需要使用\n
和style="white-space: pre-wrap;"
//eg
<view style="white-space: pre-wrap;">
左\n滑\n查\n看\n全\n部
</view>
<text class="info" decode="true">二 维 码:</text>
-
标签含有多个情况的判断 全用wx:if,不用else
-
微信小程序使用text-index缩进失效,解决方法:使用padding,或者对view标签使用text-index属性
-
letter-spacing和word-spacing失效
-
button属于原生组件,他再带padding值不需要记得归零
-
关于使用自定义tab还是写tab组件需要根据需求
1.如果所有tab都是普通跳转就自定制tab
2.如果tab中有特殊需求,比如不是跳转页面而是通过事件打开微信开放能力open-type,那就用写组件template
在需要的页面引用 -
页面头部需要返回键的路由跳转使用下列方法,此方法跳转后保留本页面不销毁
wx.navigateTo({
url:url
})
onLoad(options) {
let contentInfo = this.data.resData.article_info.content
.replace('p>','p><br/>')
.replace(/<img/g,'<img style="width:750rpx;max-width:100%;height:100rpx;display:block;margin:0 auto;"')
this.setData({
contentInfo:contentInfo
},function(){
console.log(this.data.contentInfo)
})
},
子view: catchtap='childClick' hover-stop-propagation='true'
父view: bindtap='parentClick'
<scroll-view scroll-y="true" style="height: 300rpx;" >
<view id="demo1" class="scroll-view-item demo-text-1"></view>
<view id="demo2" class="scroll-view-item demo-text-2"></view>
<view id="demo3" class="scroll-view-item demo-text-3"></view>
</scroll-view>
<video object-fit="fill" preload="auto" controls src="{{item.url}}" poster="{{item.poster}}"
enable-progress-gesture="false"
bindtap="onVideoSwitch"
id="{{index}}"
data-index="{{index}}">
</video>
data: {
currIndex:null,// 当前视频
videoList:[
{
url:'https:xxx',
poster:'https:xxx',
},
{
url:'xxx',
poster:'xxx.jpg',
},
]
},
onVideoSwitch(e){// 切换底部轮播视频
let curIdx = e.currentTarget.id;
console.log(curIdx,'id')
if(!this.data.currIndex){//如果当前没有视频在播放
this.setData({currIndex:curIdx});
let videoContext = wx.createVideoContext(curIdx, this);
videoContext.play();
}else{
//如果有视频在播放
let videoContextPrev = wx.createVideoContext(this.data.currIndex, this);
//this是在自定义组件下,当前组件实例的this,以操作组件内 video 组件
if(this.data.currIndex !== curIdx){//当前播放视频不等于点击视频
videoContextPrev.pause()
this.setData({currIndex:curIdx});
let videoContextCurrent = wx.createVideoContext(curIdx, this);
videoContextCurrent.play();
}
}
},
-
setData中键名key中使用变量
需求:封装复用函数时通过传入的参数来修改data里对应的数据内容
原理:es6 允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作
getData(pam){
this.setData({[pam]:res.data.data});
},
-
wx:if 和 hidden
因为wx:if之中的模板也可能包含数据绑定,所以当wx:if的条件值切换时,框架有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。
同时wx:if也是惰性的,如果在初始渲染条件为false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。
相比之下,hidden就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。
一般来说,wx:if有更高的切换消耗而hidden有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用hidden更好,如果在运行时条件不大可能改变则wx:if较好。
this.setData({})
wx.showToast({
title: '留言成功请耐心等待回复',
duration: 2000
})
点击拨打电话
onCall(){
let phone = "188xxxxx" // 仅为示例
wx.makePhoneCall({
phoneNumber: phone
})
},
1.现在微信公众平台-开发-开发管理-开发设置-业务域名内设置要跳转的页面的域名(把校验文件放在这个页面的后台代码里?)
2.在开发者工具里新建一个page(正常的空白页面):然后在wxml文件里复制如下代码
<view class="page-body">
<view class="page-section page-section-gap">
<web-view src="https://xxxxx.com"></web-view>
</view>
</view>
3.点击跳转到该页面
wx.navigateTo({
url:url
})
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let that= this;
setTimeout(function(){
that.getTap();
},4000)
},
- 设置小程序头部胶囊颜色:页面文件.json
1.白色半透明
"navigationBarTextStyle": "white"
- 滚动事件api
onPageScroll(e){
// console.log(e,'ppp')
if(e.scrollTop>100){
console.log('dayi')
}
},
-
input事件与祖父级的点击事件冒泡:修改input会触发父级点击事件
解决方法:
1.给input包个父级,并设置catchtap事件阻止冒泡,这样input也能使用bindinput了
2.修改样式来规避这种情况的出现,把input与祖父变为同级 -
获取节点信息
let that = this;
//创建节点选择器
var query = wx.createSelectorQuery();
//选择#id,或者.class
query.select('.xxx').boundingClientRect()
query.exec(function(res) {
//res就是 所有标签为mjltest的元素的信息 的数组
//取高度
that.setData({pageHeight:res[0].height});
})