h5+Vant左滑删除

介绍:这是一个上拉加载下拉刷新的列表,外加左滑删除。废话不多说,直接上代码!!!!

<template>
  <div class="info-list">
    <div class="top-bar">
      <van-nav-bar
        title="物料清单"
        left-arrow
        @click-left="onClickLeft"
      />
    </div>
    <div class="main">
      <div class="content-wrap">
        <van-pull-refresh style="height: 100%;" v-model="refreshing" @refresh="onRefresh">
          <van-list
            v-model="loading"
            :finished="finished"
            finished-text="没有更多了"
            @load="onLoad"
          >
            <div class="data-list-wrap" v-for="(item, index) in list" :key="index" data-type="0">
              <div class="top-data-list" @touchstart.capture="touchStart" @touchend.capture="touchEnd"  @click="oneself">
                <div class="title-box">
                  <span class="top-title">名字</span>
                </div>
                <div class="content-box">
                  <div class="content-area" style="width: 60%;">
                    <span class="content-text">集团编码:{{ index }}</span>
                    <span class="content-text">物料规格:{{ index }}</span>
                    <span class="content-text">系统编码:{{ index }}</span>
                    <span class="content-text">图样:{{ index }}</span>
                    <span
                      class="content-text">仓库位置:xxx</span>
                    <span
                      class="content-text">车间位置:xxx</span>
                  </div>
                </div>
              </div>
              <div class="removeBtn" @click="remove" :data-index="index">删除</div>
            </div>
          </van-list>
        </van-pull-refresh>
      </div>
    </div>
  </div>
</template>

<script>
import {NavBar, PullRefresh,List, Popup, Picker, Toast} from 'vant'
  export default {
    name: 'infoList',
    components: {
      [NavBar.name]: NavBar,
      [PullRefresh.name]: PullRefresh,
      [List.name]: List
    },
    data () {
      return {
        refreshing: false,
        list: [],
        loading: false,
        finished: false,
        startX: 0, //滑动开始
        endX: 0, //滑动结束
      }
    },
    methods: {
      onClickLeft () {
        this.$router.back()
      },
      // 下拉刷新
      onRefresh() {
        const _that = this
        setTimeout(() => {
          this.$toast('刷新成功');
          _that.refreshing = false;
        }, 500);
      },
      onLoad() {
        // 异步更新数据
        setTimeout(() => {
          for (let i = 0; i < 10; i++) {
            this.list.push(this.list.length + 1);
          }
          // 加载状态结束
          this.loading = false;

          // 数据全部加载完成
          if (this.list.length >= 40) {
            this.finished = true;
          }
        }, 500);
      },
      //滑动开始
      touchStart(e) {
        // 记录初始位置
        this.startX = e.touches[0].clientX;
      },
      // 向左滑动出现删除按钮时,点击非删除区域则关闭左滑
      oneself() {
        if (this.checkSlide()) {
          this.restSlide();
        } else {
          console.log("点击每一条");
        }
      },
      //滑动结束
      touchEnd(e) {
        // 当前滑动的父级元素
        let parentElement = e.currentTarget.parentElement;
        // 记录结束位置
        this.endX = e.changedTouches[0].clientX;
        // 左滑大于30距离删除出现
        if (parentElement.dataset.type == 0 && this.startX - this.endX > 30) {
          this.restSlide();
          parentElement.dataset.type = 1;
        }
        // 右滑
        if (parentElement.dataset.type == 1 && this.startX - this.endX < -30) {
          this.restSlide();
          parentElement.dataset.type = 0;
        }
        this.startX = 0;
        this.endX = 0;
      },
      //判断当前是否有滑块处于滑动状态
      checkSlide() {
        let listItems = document.querySelectorAll(".data-list-wrap");
        for (let i = 0; i < listItems.length; i++) {
          if (listItems[i].dataset.type == 1) {
            return true;
          }
        }
        return false;
      },
      //复位滑动状态
      restSlide() {
        let listItems = document.querySelectorAll(".data-list-wrap");
        // 复位
        for (let i = 0; i < listItems.length; i++) {
          listItems[i].dataset.type = 0;
        }
      },
      //删除数据信息
      remove(e) {
        console.log('删除');
        // 当前索引值
        let index = e.currentTarget.dataset.index;
        // 复位
        this.restSlide();
      },
    }
  }
</script>

<style lang="scss" scoped>
.info-list {
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  .top-bar {
    width: 100%;
    height: 2.9rem;
  }
  .main {
    width: 100%;
    height: calc(100% - 2.9rem);
    background-color: #fff;
    padding: 0 10px;
    box-sizing: border-box;
    .content-wrap {
      width: 100%;
      height: 100%;
      overflow: auto;
      .van-pull-refresh {
        overflow: auto;
      }
      .van-list {
        overflow: hidden;
      }
      .data-list-wrap {
        width: 100%;
        border-radius: 5px;
        // overflow: hidden;
        background-color: #fff;
        padding: 0 10px;
        box-sizing: border-box;
        background-color: #fafafa;
        border: 3px solid #fafafa;
        margin: 10px 0;
        & {
          /* 全部样式 0.2秒 缓动*/
          transition: all 0.2s;
        }
        .top-data-list {
          width: 100%;
          display: flex;
          align-items: center;
          flex-direction: column;
          justify-content: space-between;
          padding-bottom: 6px;

          .title-box{
            width: 100%;
            display: flex;
            justify-content: start;
            .top-title {
              font-size: 18px;
              font-weight: 700;
              display: block;
              margin: 10px 0;
            }
          }
          .content-box{
            width: 100%;
            display: flex;
            justify-content: start;

            .content-area{
              width: 50%;
              overflow: hidden;
            }

            .content-text {
              width: 100%;
              white-space: nowrap;
              text-overflow: ellipsis;
              overflow: hidden;
              font-size: 15px;
              color: #c6c6c6;
              display: block;
              line-height: 2;
            }

            .content-img {
              width: 100%;
              height: 100%;
              position: relative;
              display: flex;
              align-items: center;
              justify-content: center;

              img{
                width: 60%;
              }
            }
          }
        }
        /* =0隐藏 */
        &[data-type="0"] {
          transform: translate3d(0, 0, 0);
        }

        /* =1显示 */
        &[data-type="1"] {
          /* -64px 设置的越大可以左滑的距离越远,最好与下面删除按钮的宽度以及定位的距离设置一样的值*/
          transform: translate3d(-70px, 0, 0);
        }
        .bottom-data-list {
          width: 100%;
          height: 15%;
          display: flex;
          align-items: center;
          justify-content: space-between;
          border-top: 1px solid #ccc;

          .bottom-left-text {
            font-size: 15px;
            color: #fff;
            padding: 2px 5px;
            background-color: #969a9e;
            border-radius: 5px;
          }

          .bottom-center-text {
            font-size: 15px;
            color: #fff;
            padding: 2px 5px;
            background-color: #1989fa;
            border-radius: 5px;
          }

          .bottom-right-text {
            font-size: 15px;
            color: #7b7b7b;
          }
        }
        .removeBtn {
          width: 65px;
          height: 100%;
          background: #ff4949;
          display: flex;
          align-items: center;
          justify-content: center;
          font-size: 16px;
          color: #fff;
          position: absolute;
          top: 0px;
          right: -70px;
          text-align: center;
          border-radius: 2px;
        }
      }
    }
  }
}
</style>

效果图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/587118.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Floyd Warshall算法:原理、Java实现与优缺点

Floyd Warshall算法的简介 在我们的日常生活中&#xff0c;常常会遇到需要找出两点之间最短路径的问题。比如&#xff0c;从家到公司的最短路线&#xff0c;或者在旅行时&#xff0c;从一个景点到另一个景点的最快路线。 为了解决这类问题&#xff0c;科学家们设计出了许多算法…

利用大型语言模型提升数字产品创新:提示,微调,检索增强生成和代理的应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

code-server容器webpack的ws无法连接解决方法

TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务&#xff1b;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务&#xff1b;[ht…

spring-boot示例

spring-boot版本&#xff1a;2.0.3.RELEASE 数据库: H2数据库 &#xff08;嵌入式内存性数据库&#xff0c;安装简单&#xff0c;方便用于开发、测试&#xff0c;不适合用于生产&#xff09; mybatis-plus框架&#xff0c;非常迅速开发CRUD

如何去掉引用网址的小尾巴

引用文章的链接时会出现很长冗余信息&#xff0c;删&#xff0c;删&#xff0c;删……&#xff0c;直到从平流层删到地平线 使用 Neat URL&#xff08;支持 google 系、Firefox&#xff09;扩展中的【拦截参数】可以去除的这类百无聊赖的小尾巴。 安装后&#xff0c;点击【Pr…

C语言——单链表实现数据增删查改

一.前言 嗨嗨嗨&#xff0c;我们又见面了。前面我们已经学习了关于数据结构中的顺序表&#xff0c;今天我们来学习数据结构中的单链表。废话不多说让我们直接开始吧。 二.正文 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺…

【C#】基础知识

0.参考 C#语言入门详解 1.几种打印hello_world的方式 1.1 console控制台 新建一个console&#xff0c;直接打印&#xff1a; Console.WriteLine("Hello_world");启动一闪而过&#xff0c;在vs调试中选择开始执行不调试&#xff08;without debug&#xff09;。 …

算法效率的判断及一些典型例题的讲解

一.算法效率 1.用处&#xff1a;判断算法的好坏&#xff0c;好的算法应该是高效的 2算法效率取决于时间复杂度和空间复杂度 <1>时间复杂度 1.1概念&#xff1a;算法中基本操作的执行次数就是算法的时间复杂度 1.2表示&#xff1a;大O的渐进表示法&#xff0c;例如O(N)…

java技术栈快速复习02_前端基础知识总结

前端基础 经典三件套&#xff1a; html&#xff08;盒子&#xff09;css&#xff08;样式&#xff09;JavaScript&#xff08;js&#xff1a;让盒子动起来&#xff09; html & css HTML全称&#xff1a;Hyper Text Markup Language(超文本标记语言)&#xff0c;不是编程语…

记一次生产事故的排查和解决

一. 事故概述 春节期间, 生产系统多次出现假死不可用现象, 导致绝大部分业务无法进行. 主要表现现象为接口无法访问. 背景为900W客户表和近实时ES, 以及春节期间疫情导致的普通卖菜场景近似秒杀等. 二. 排查过程 优先排查了info, error, catalina日志, 发现以下异常: 主要的…

边循环边删除List中的数据

List边循环&#xff0c;边删除&#xff1b;这种一听感觉就像是会出问题一样&#xff0c;其实只要是删除特定数据&#xff0c;就不会出问题&#xff0c;你如果直接循环删除所有数据&#xff0c;那可能就会出问题了&#xff0c;比如&#xff1a; public static void main(String[…

公考学习平台|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.1论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

React的useEffect

概念&#xff1a;useEffect是一个React Hook函数&#xff0c;组件渲染之后执行的函数 参数1是一个函数&#xff0c;可以把它叫做副作用函数&#xff0c;在函数内部可以放置要执行的操作参数2是一个数组&#xff08;可选参&#xff09;&#xff0c;在数组里放置依赖项&#x…

Liunx发布tomcat项目

Liunx在Tomcat发布JavaWeb项目 1.问题2.下载JDK3.下载Tomcat4.Tomcat本地JavaWeb项目打war包、解压、发布5.重启Tomcat,查看项目 1.问题 1.JDK 与 Tomcat 版本需匹配&#xff0c;否则页面不能正确显示 报错相关&#xff1a;Caused by: java.lang.ClassNotFoundException: java…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型&#xff08;LLM&#xff09;的应用程序的框架&#xff0c;但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK&#xff0c;旨在帮助开发…

每日OJ题_DFS爆搜深搜回溯剪枝⑤_力扣37. 解数独

目录 力扣37. 解数独 解析代码 力扣37. 解数独 37. 解数独 难度 困难 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的…

C++--const成员及const取地址操作符重载

前言 今天我们来了解一下const成员的基本使用,以及const取地址重载的运用 来开始今天的学习 const成员 1.基本定义, 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的*this指针&#xff0c;表明在该成员函…

Android4.4真机移植过程笔记(二)

5、盘符挂载 先定义overlay机制路径&#xff0c;后面storage_list.xml要用到&#xff1a; 在路径&#xff1a; rk3188_android4.4.1/device/rockchip/OK1000/overlay/frameworks/base/core/res/res/xml/定义好&#xff0c;注意名字要和emmc的代码片段&#xff08;往下面看&am…

python学习笔记----安装pycharm(1)

一、安装pycharm 1. 下载并安装pycharm https://www.jetbrains.com/pycharm/download2.汉化pycharm 安装插件并重启IDE完成汉化 二、 第一个python程序

Flask教程1:flask框架基础入门,路由、模板、装饰器

文章目录 一、 简介二、 概要 一、 简介 Flask是一个非常小的Python Web框架&#xff0c;被称为微型框架&#xff1b;只提供了一个稳健的核心&#xff0c;其他功能全部是通过扩展实现的&#xff1b;意思就是我们可以根据项目的需要量身定制&#xff0c;也意味着我们需要学习各…