轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 微信小程序 查看主题

微信小程序小技巧系列《十二》支付倒计时效果,滑动删除效果 ... ... ...

发布者: ljf77 | 发布时间: 2018-2-25 14:57| 查看数: 6046| 评论数: 1|帖子模式

本系列为小技巧或知识点聚合,如果你想看更多相关内容,请在本系列文章的相关文章内查看:
一:支付倒计时
作者:莫兰迪不会没有瓶子,来自授权地址

由于web 经验弱爆- -  一开始我的思路是找事件,但是看了半天API 基本都是点击触摸,通过物理触发- - 

我居然忽略了生命周期,生命周期+线程不就完全OK吗~ 

事实证明,线程还是王道啊,一开始就应该这么搞嘛~

度娘上面也看了很多都是用js写的,but,可能刚做没几天吧,我对js与微信小程序掌握还不够熟练

思路:

  1. onLoad:function(options)调用倒计时方法函数
  2. 定义线程进行数据动态现实
    1. 日期转化成毫秒
    2. 定义线程动态显示
    3. 渲染倒计时
      1. 毫秒转成固定格式
      2. 处理分秒位数不足的补0

看代码了

wxml:

  1. <view class="pay_time">
  2. <image src="{{imgUrls_pay_time}}"></image>
  3. <text>支付剩余时间:</text>
  4. <text>{{clock}} </text>
  5. </view>

wxjs:

  1. // pages/order/take_order/pay/pay.js
  2. var app = getApp()
  3. Page({
  4. data: {
  5. imgUrls_pay_time: '/image/icon_orderstatus_countdown.png',
  6. "productName": "",
  7. "productPrice": "",
  8. "payDetail": [],
  9. "wxPayMoneyDesc": "",
  10. "expireTime": "",
  11. clock: ''
  12. },
  13. onLoad: function (options) {
  14. // 页面初始化 options为页面跳转所带来的参数
  15. new app.WeToast()
  16. var that = this;
  17. that.count_down();
  18. },
  19. onReady: function () {
  20. // 页面渲染完成
  21. },
  22. onShow: function () {
  23. // 页面显示
  24. },
  25. onHide: function () {
  26. // 页面隐藏
  27. },
  28. onUnload: function () {
  29. // 页面关闭
  30. },
  31. /* 毫秒级倒计时 */
  32. count_down: function () {
  33. var that = this
  34. //2016-12-27 12:47:08 转换日期格式
  35. var a = that.data.expireTime.split(/[^0-9]/);
  36. //截止日期:日期转毫秒
  37. var expireMs = new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
  38. //倒计时毫秒
  39. var duringMs = expireMs.getTime() - (new Date()).getTime();
  40. // 渲染倒计时时钟
  41. that.setData({
  42. clock: that.date_format(duringMs)
  43. });
  44. if (duringMs <= 0) {
  45. that.setData({
  46. clock: "支付已截止,请重新下单"
  47. });
  48. // timeout则跳出递归
  49. return;
  50. }
  51. setTimeout(function () {
  52. // 放在最后--
  53. duringMs -= 10;
  54. that.count_down();
  55. }
  56. , 10)
  57. },
  58. /* 格式化倒计时 */
  59. date_format: function (micro_second) {
  60. var that = this
  61. // 秒数
  62. var second = Math.floor(micro_second / 1000);
  63. // 小时位
  64. var hr = Math.floor(second / 3600);
  65. // 分钟位
  66. var min = that.fill_zero_prefix(Math.floor((second - hr * 3600) / 60));
  67. // 秒位
  68. var sec = fill_zero_prefix(second % 60);// equal to => var sec = second % 60;
  69. return hr + ":" + min + ":" + sec + " ";
  70. },
  71. /* 分秒位数补0 */
  72. fill_zero_prefix: function (num) {
  73. return num < 10 ? "0" + num : num
  74. }
  75. })
tip:如果不进行位数补0
将会显示如下


二:滑动删除效果



item的布局:

推荐小程序优先使用flex布局,完全够用。这也是微信推荐的。


  1. <view wx:for="{{cardTeams}}" wx:for-item="cardTeam" id="{{cardTeam.id}}" class="item" bindtouchstart="drawStart" bindtouchmove="drawMove" bindtouchend="drawEnd" style="right:{{cardTeam.right}}px">
  2. <image class="img" src="" mode="scaleToFill"></image>
  3. <view class="number-wrapper">
  4. <text class="name">{{cardTeam.name}}</text>
  5. <view class="count-wrapper">
  6. <view class="decrease-btn">-</view>
  7. <text class="count">1</text>
  8. <view class="increase-btn">+</view>
  9. </view>
  10. <view class="price-wrapper">
  11. <text class="unit">¥</text>
  12. <text class="price">99.80</text>
  13. </view>
  14. </view>
  15. <view class="ok"><view class="inner-ok">确定</view></view>
  16. <view class="remove" data-id="{{cardTeam.id}}" bindtap="delItem"><view>删除</view></view>
  17. </view>

主要是将删除按钮的设为绝对定位(position: absolute):

  1. .item .remove{
  2. width: 60px;
  3. height: 100%;
  4. background-color: red;
  5. position: absolute;
  6. top: 0;
  7. right: -60px;
  8. display: flex;
  9. justify-content: center;
  10. align-items: center;
  11. }

  1. Page({
  2. data: {
  3. cardTeams:[{"id":"aaaaa", "name":"android教程", "url":"", "right":0, "startRight":0},{"id":"bbbb", "name":"小程序教程", "url":"", "right":0, "startRight":0}]
  4. },
  5. drawStart : function(e){
  6. // console.log("drawStart");
  7. var touch = e.touches[0];
  8. startX = touch.clientX;
  9. startY = touch.clientY;
  10. var cardTeams = this.data.cardTeams;
  11. for(var i in cardTeams){
  12. var data = cardTeams[i];
  13. data.startRight = data.right;
  14. }
  15. key = true;
  16. },
  17. drawEnd : function(e){
  18. console.log("drawEnd");
  19. var cardTeams = this.data.cardTeams;
  20. for(var i in cardTeams){
  21. var data = cardTeams[i];
  22. if(data.right <= 100/2){
  23. data.right = 0;
  24. }else{
  25. data.right = maxRight;
  26. }
  27. }
  28. this.setData({
  29. cardTeams:cardTeams
  30. });
  31. },
  32. drawMove : function(e){
  33. //console.log("drawMove");
  34. var self = this;
  35. var dataId = e.currentTarget.id;
  36. var cardTeams = this.data.cardTeams;
  37. if(key){
  38. var touch = e.touches[0];
  39. endX = touch.clientX;
  40. endY = touch.clientY;
  41. console.log("startX="+startX+" endX="+endX );
  42. if(endX - startX == 0)
  43. return ;
  44. var res = cardTeams;
  45. //从右往左
  46. if((endX - startX) < 0){
  47. for(var k in res){
  48. var data = res[k];
  49. if(res[k].id == dataId){
  50. var startRight = res[k].startRight;
  51. var change = startX - endX;
  52. startRight += change;
  53. if(startRight > maxRight)
  54. startRight = maxRight;
  55. res[k].right = startRight;
  56. }
  57. }
  58. }else{//从左往右
  59. for(var k in res){
  60. var data = res[k];
  61. if(res[k].id == dataId){
  62. var startRight = res[k].startRight;
  63. var change = endX - startX;
  64. startRight -= change;
  65. if(startRight < 0)
  66. startRight = 0;
  67. res[k].right = startRight ;
  68. }
  69. }
  70. }
  71. self.setData({
  72. cardTeams:cardTeams
  73. });
  74. }
  75. },
  76. //删除item
  77. delItem: function(e){
  78. var dataId = e.target.dataset.id;
  79. console.log("删除"+dataId);
  80. var cardTeams = this.data.cardTeams;
  81. var newCardTeams = [];
  82. for(var i in cardTeams){
  83. var item = cardTeams[i];
  84. if(item.id != dataId){
  85. newCardTeams.push(item);
  86. }
  87. }
  88. this.setData({
  89. cardTeams:newCardTeams
  90. });
  91. },
  92. onLoad: function () {
  93. console.log('onLoad:'+app.globalData.domain)
  94. }
  95. })

drawStart用于记录手指触碰时的位置,drawMove记录手指滑动的位置,两者的差值就是删除按钮的偏移量

drawEnd手指抬起时触发,用于设置弹回、摊开效果。目前我的是超过一半自动弹开,不足一半自动收回。

最新评论

俯瞰繁华 发表于 2022-5-25 13:02
网站设计音乐试听代码

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表