zoukankan      html  css  js  c++  java
  • 小程序左右滑动显示操作

    小程序左右滑动显示操作

    开发使用的是mpvue框架,具体的事件名需要更改一下。

    具体在小程序中事件名为:

    mpvue 微信小程序
    touchstart bindtouchstart
    click bindtap
    touchmove bindtouchmove

    效果如下:

    html/wxml 代码如下:

    <div class="wrap">
    	<div class="item" @touchstart="startX" @click="resetX" @touchmove="moveX" :style="{left: '-' + recordX + 'rpx'}">
    		<div class="content">test</div>
    	</div>
    	<div class="test"></div>
    </div>
    

    css 文件如下

    <style lang="less">
      .wrap{
        position: relative;
        z-index: 2;
        text-align: center;
        color: #fff;
        line-height: 150rpx;
        height: 150rpx;
        .item{
          background: #39c5bb;
          position: relative;
          transition: left .3s;
        }
        .test{  // 滑动滑块后出现的图标
          position: absolute;
          top: 50rpx;
          right: 20rpx;
          z-index: -1;
           50rpx;
          height: 50rpx;
          background: #f6c;
        }
      }
    </style>
    
    • HTML 结构: 父容器包裹初始时显示的内容和隐藏的操作图标。且他们为兄弟节点。
    • CSS 要点:显示内容采用position定位,进行滑动操作时使用left值进行相对位移。left的值通过v-bind:style实现响应。
    • 隐藏元素采用position: absolute;相对于父容器进行定位,并且层级低于显示元素。被其覆盖。
    • 优化:为了让滑动效果平滑一些,不那么生硬。使用CSS3 transition 将 left属性进行简单的动画处理

    js 部分入下:

    <script>
      export default {
        data () {
          recordX: 0
        },
        methods: {
          startX (e) {
            this.recordX = e.touches[0].clientX
          },
          resetX () {
            this.recordX = 0
          },
          moveX (e) {
            console.log(e)
          let currentX = e.touches[0].clientX
          if (currentX - this.recordX <= -60) {
            this.recordX = 100
          }
          if (currentX - this.recordX >= 60) {
            this.recordX = 0
          }
        }
      }
    }
    </script>
    
    • 首先 startX 函数记录 点击屏幕的X轴的值。
    • moveX 计算在X轴上移动屏幕的距离。
    • 当前位置 - 起始位置 <= -60 则表示左滑。因为屏幕的二维坐标是从上到下,从左到右递增的。因此向左移,后者坐标肯定小于前者,因此为负数。至于60,是值操作按钮所占的宽度的一半。超过一半则保持滑动状态
    • 当前位置 - 起始位置 >= 60.原理同上。这次代表向右滑。
    • resetX 重置位置。因为touchStart时也会调用一次click事件。若不进行初始化,则位置会被记录,第二次进行触碰时会使元素闪动。体验不佳。
  • 相关阅读:
    p1012拼数题解
    LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜索树)
    UVA 11827 Maximum GCD
    LightOJ1336 Sigma Function(约数和为偶数的个数)
    LightOJ 1197 Help Hanzo(区间素数筛选)
    LightOJ 1236
    BZOJ3339 Rmq Problem
    COJ983 WZJ的数据结构(负十七)
    LCA的五种解法
    hdu4223(dp)
  • 原文地址:https://www.cnblogs.com/miku561/p/10566404.html
Copyright © 2011-2022 走看看