微信小程序实践中获得的知识(1)

1、局部滑动

实现局部滑动不一定需要使用Scroll-view,可以采用(position:fixed;)使不需要滑动的其中一部分固定,其余部分pages中的内容是自己可以滚动的;

2、避免多次点击

相关链接

方法一:使用限制按钮或控件的点击时间间隔的方式处理。

JS代码
Page({
  data: {
     buttonClicked: false, //避免多次点击
  },
//在需要点击的事件中调用buttonClicked函数
  click: function (e) {
    this.buttonClicked(this);
  },
})
...  ...
//避免多次点击
buttonClicked: function () {
   var that = this;
   this.setData({
     buttonClicked: true,
     });
    setTimeout(function () {
        that.setData({
          buttonClicked: false,
            });
      }, 2000);
  },
wxml代码
//为view标签时的写法与//为button 标签时的写法不同
<view bindtap="{{!buttonClicked?'click':''}}"" />
<button bindtap="{{!buttonClicked?'click':''}}" />
<button bindtap="click" disabled="buttonClicked" />

方法二:使用 wx.showLoading 在请求执行之前显示一个加载框,请求完成后再关闭加载框。

JS代码
 showLoading:function(message) {
  if (wx.showLoading) {
    // 基础库 1.1.0 微信6.5.6版本开始支持,低版本需做兼容处理
    wx.showLoading({
      title: message,
      mask: true
    });
  } else {
    // 低版本采用Toast兼容处理并将时间设为20秒以免自动消失
    wx.showToast({
      title: message,
      icon: 'loading',
      mask: true,
      duration: 20000
    });
  }
}
 
hideLoading:function() {
  if (wx.hideLoading) {
    // 基础库 1.1.0 微信6.5.6版本开始支持,低版本需做兼容处理
    wx.hideLoading();
  } else {
    wx.hideToast();
  }
}

3、swiper禁止手动滑动

[链接](https://www.jianshu.com/p/5c34d60bc81f

只需在swiper-slide外层容器加一行css代码,无需引用任何swiper相关css文件。
.swiper-container{
    pointer-events: none;
}

4、微信小程序自定义组件传值 页面和组件相互传数据操作示例

相关链接

① 将组件中数据传到页面去

在页面中定义组件 ,json文件中记得加上
{
 "usingComponents": {
 "showModel": "/components/showModel/showModel"
 }
}
页面中引用组件bind:showModalSuccess="showModalSuccess"
<showModel id="showModal" bind:showModalSuccess="showModalSuccess" showModal="{{showModal}}" ></showModel>
到组件
// 与页面衔接 触发页面中的方法并传数据,res.data就是组件中请求到的数据;
 this.triggerEvent("showModalSuccess", res.data);
回到index.js,e.detail就能获取到组件中的res.data的数据啦~
showTab:function(e){
 console.log('this is showtabBar');
 console.log(e.detail);
},

② 将页面中数据传到组件中去

页面中引用组件
<showModel id="showModal" show="{{userShow}}"></showModel>
取到我们从页面中传入的值
properties: { //对外属性,即如果外部的wxml文件传入数据时,会把数据设置成properties的属性
'show':{
 type:Boolean,
 value:'',
 observer: function (newVal, oldVal) {
 console.log(newVal)
 }
},
},
ready:function(){
console.log(this.properties);
},

5、商品列表双列渲染

flex弹性布局

display: flex;  /**指定flex 布局*/
flex-wrap:wrap; /**不够了就换行*/

6、微信小程序回到顶部的两种方法

①使用view形式的回到顶部

HTML
<image src='../../img/button-top.png' class='goTop' hidden='{{!floorstatus}}' bindtap="goTop"></image>
CSS
/* 返回顶部 */
.goTop{
 height: 80rpx;
 width: 80rpx;
 position: fixed;
 bottom: 50rpx;
 background: rgba(0,0,0,.3);
 right: 30rpx;
 border-radius: 50%;
}
JS
 // 获取滚动条当前位置
 onPageScroll: function (e) {
  console.log(e)
  if (e.scrollTop > 100) {
   this.setData({
    floorstatus: true
   });
  } else {
   this.setData({
    floorstatus: false
   });
  }
 },

 //回到顶部
 goTop: function (e) { // 一键回到顶部
  if (wx.pageScrollTo) {
   wx.pageScrollTo({
    scrollTop: 0
   })
  } else {
   wx.showModal({
    title: '提示',
    content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
   })
  }
 },

②使用scroll-view形式的回到顶部

HTML
<scroll-view scroll-y scroll-top='{{topNum}}' bindscroll="scrolltoupper">
<image src='../../img/button-top.png' class='goTop' hidden='{{!floorstatus}}' bindtap="goTop"></image>
CSS
/* 返回顶部 */
.goTop{
 height: 80rpx;
 width: 80rpx;
 position: fixed;
 bottom: 50rpx;
 background: rgba(0,0,0,.3);
 right: 30rpx;
 border-radius: 50%;
}
JS
 data:{
  topNum: 0
 }

 // 获取滚动条当前位置
 scrolltoupper:function(e){
  console.log(e)
  if (e.detail.scrollTop > 100) {
   this.setData({
    floorstatus: true
   });
  } else {
   this.setData({
    floorstatus: false
   });
  }
 },

 //回到顶部
 goTop: function (e) { // 一键回到顶部
  this.setData({
   topNum: this.data.topNum = 0
  });
 },

7、下拉刷新事件无效原因

相关链接
1.页面json文件中没有开启enablePullDownRefresh配置
2.请在真机调试中调试(开发工具下拉事件监听不到)
tip: q:有下拉页面移动效果,没有刷新加载动画
a:加载动画颜色跟背景色重叠,设置json文件"backgroundTextStyle": “dark”
q:下拉后页面不返回顶部
a:没有调用结束下拉刷新动画方法

JS
onPullDownRefresh: function () {
    console.log('下拉')
    wx.startPullDownRefresh()
    setTimeout(()=>{
      wx.stopPullDownRefresh()
    },2000)
    
  }
JSON
{
  "backgroundTextStyle": "dark",
  "enablePullDownRefresh": true
}

8、小技巧

①在画页面前,可以在app.wxss中先定义好一些全局样式,例如主题色,边框颜色等,②小程序的tabBar的样式可以在app.json文件中进行设置,③页面上方的标题可以在页面的.json文件中设置是否有,如果不设置则是默认,设置为custom为自定义,只保留右上角胶囊按钮。
"navigationStyle":"custom",
④背景颜色渐变属性:background-image,⑤画页面时最好先想一些布局,最好不要用太多z-index样式来改变容器的布局,可以利用样式覆盖的效果,将层级高的容器写在后面,层级底的容器写在前面,⑥CSS3动画效果,在页面的样式文件中加animation样式,例如:animation: myfirst 1s ease-in-out infinite;
/* 动画 */
.animation {
    width: 330rpx;
    height: 330rpx;
    animation: myfirst 1s ease-in-out infinite;
    -webkit-animation: myfirst 1s ease-in-out infinite;
    position: absolute;
    top: 0rpx;
    right: 0rpx;
}

@keyframes myfirst {
    0% {
        filter: brightness(96%);
    }

    25% {
        filter: brightness(116%);
    }

    50% {
        filter: brightness(136%);
    }

    75% {
        filter: brightness(116%);
    }

    100% {
        filter: brightness(96%);
    }
}

9、列表循环

1、wx:for="{{数组或者对象}}"  wx:for-item="循环项的名称"   wx:for-index="循环项的索引"
2、wx:key="唯一的值"用来提高列表渲染的性能
wx:key 绑定一个普通的字符串的时候,那么这个字符串名称肯定是 循环数组 中的对象的 唯一属性,
wx:key='*this' 就表示 你的数组是一个普通的数组, *this 就表示 你的数组 是一个普通的数组, *this 表示是循环项 [1,2,3,4]  ["1","2","ass"]
3、当出现数组的嵌套循环的时候,尤其要注意 以下绑定的名称不要重名,
 wx:for-item="item"  wx:for-index="index"
4、在只有一层循环的情况下,我们默认不写 wx:for-item="item"  wx:for-index="index"

10、对象循环

1、wx:for="{{对象}}"  wx:for-item="对象的值"   wx:for-index="对象的属性"
2、循环对象的时候,最好把item和index的名称都修改一下 wx:for-item="value"  wx:for-index="key" wx:key="一个唯一的属性"



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容