微信小程序实践中获得的知识(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 标签时的写法不同

方法二:使用 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"

到组件
// 与页面衔接 触发页面中的方法并传数据,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);
},

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

页面中引用组件

取到我们从页面中传入的值
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

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


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="一个唯一的属性"



你可能感兴趣的:(微信小程序实践中获得的知识(1))