IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 8、滑动删除组件_mobile端_react -> 正文阅读

[JavaScript知识库]8、滑动删除组件_mobile端_react

  1. jsx
/**
 * 滑动删除
 *
 * children   props 里面传递的盒子
 * onDelete   点击删除调用props方法
 * id         当前点击的唯一值
 */
import React from 'react';

import './index.less';

class SlideDelete extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      width: 0,
      isShow: false
    };
  }

  componentDidMount() {}

  handleTouchStart = (e) => {
    this.startX = e.touches[0].pageX;
    this.startY = e.touches[0].pageY;
  };

  handleTouchMove = (e) => {
    this.currentX = e.touches[0].pageX;
    this.moveX = this.currentX - this.startX;
    this.moveY = e.touches[0].pageY - this.startY;
    // 纵向移动时return
    if (Math.abs(this.moveY) > Math.abs(this.moveX)) {
      return;
    }
    // 滑动超过一定距离时,才触发
    if (Math.abs(this.moveX) < 10) {
      return;
    }
    const distance = this.moveX >= 0 ? 0 : -70;
    this.setState({
      moveStyle: {
        transform: `translateX(${distance}px)`
      },
      width: Math.abs(distance * 1),
      isShow: true
    });
  };

  render() {
    let { moveStyle, width, isShow } = this.state;
    let { id } = this.props;
    return (
      <React.Fragment>
        <div className="slide-item-wrap">
          <div
            className="slide-item-children"
            style={moveStyle}
            onTouchStart={this.handleTouchStart}
            onTouchMove={this.handleTouchMove}>
            {this.props.children}
          </div>
          <div
            className={`delete-btn ${
              width ? 'showBtn' : isShow ? 'hideBtn' : ''
            }`}
            style={{ width: width + 'px' }}
            onClick={(e) => {
              e.stopPropagation();
              this.props.onDelete(id);
            }}>
            删除
          </div>
        </div>
      </React.Fragment>
    );
  }
}

export default SlideDelete;

  1. css文件
.slide-item-wrap {
  width: 100%;
  height: 100%;
  background: #ffffff;
  border-radius: 5px;
  position: relative;
  overflow: hidden;
  //   margin-bottom: 12px;

  .slide-item-children {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    transition: transform 0.3s ease;
  }

  .delete-btn {
    position: absolute;
    top: 0;
    right: 0;
    height: 100%;
    background: #fc5a45;
    z-index: 99;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    color: #ffffff;
    border-radius: 0 5px 5px 0;
    white-space: nowrap;
  }
  .showBtn {
    animation-name: showBtn;
    animation-duration: 0.5s;
  }
  .hideBtn {
    animation-name: hideBtn;
    animation-duration: 0.5s;
  }
  /* 动画代码 */
  @keyframes showBtn {
    from {
      width: 0px;
    }
    to {
      width: 70px;
    }
  }
  /* 动画代码 */
  @keyframes hideBtn {
    from {
      width: 70px;
    }
    to {
      width: 0px;
    }
  }
}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:02:04  更:2022-03-17 22:04:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:08:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码