vue上下滑动(仿高德)

2023-11-16

效果图

在这里插入图片描述

需求

在这里插入图片描述

一个页面底部对应一块区域 底部的区域可以上下滑动到顶部 可以来回上下滑动延伸
如上所述:

代码

<template>
    <view class="panel"  @touchmove.stop="touchmoveHandle" @touchstart.stop="touchstartHandle" @touchend.stop="touchendHandle" :style="{height: `${height}px`}" :class="{search_radius: !isScroll}">
   
        <view class="tapBoxTouchLine" v-if="showLine">
            <view class="line"></view>
        </view>
        <view class="panel_content">
            <scroll-view :scroll-y="isScroll" style="height: 100%">
                <slot></slot>
            </scroll-view>
        </view>
    </view>
</template>
 
<script>
    export default {
        props: {
            minHeight: {
                type: Number,
                default: 220
            },
            middleHeight: {
                type: Number,
                default: 380
            },
            showLine: {
                type: Boolean,
                default: true
            },
        },
        created() {
             const info = uni.getSystemInfoSync()
             // console.log(info)
             this.maxHeight = info.windowHeight
             console.log(this.maxHeight);
        },
        data() {
            return {
                maxHeight: 1000,
                height: 230,
                lastY: 0,
                up: true,
                direction_flag: true,
                isScroll: false
            };
        },
        methods: {
            touchstartHandle(event) {
                this.lastY = event.touches[0].pageY;
            },
            touchendHandle(event) {
                if (this.up) {
                    if (this.height < this.middleHeight) {
                        this.height = this.middleHeight
                        this.isScroll = false
                    } else {
                        this.height = this.maxHeight
                        this.isScroll = true
                    }
                } else {
                    if (this.height < this.middleHeight) {
                        this.height = this.minHeight
                        this.isScroll = false
                    } else {
                        this.height = this.middleHeight
                        this.isScroll = false
                    }
                }
                this.direction_flag = true
            },
            touchmoveHandle(event) {
                let currentY = event.touches[0].pageY
                let transformHeight = currentY - this.lastY
                this.height = this.height - (transformHeight / 20)
                if (this.height > this.maxHeight) {
                    this.height = this.maxHeight
                }
                if (this.height < this.minHeight) {
                    this.height = this.minHeight
                }
                if (this.direction_flag) {
                    this.direction_flag = false
                    if (transformHeight > 0) {
                        // 下滑
                        this.up = false
                    } else {
                        // 上滑
                        this.up = true
                    }
                }
 
            }
        }
    }
</script>
 
<style lang="scss">
    .tapBoxTouchLine {
        display: flex;
        align-items: center;
        justify-content: center;
    }
    
    .line {
        margin: 0px;
        vertical-align: middle;
        border-bottom: 8rpx solid rgb(68, 68, 68);
        width: 60rpx;
        transform: scaleY(0.5);
    }
    .panel {
        z-index: 999;
        position: absolute;
        bottom: 0;
        width: 100vw;
        background-color: #ffffff;
        padding: 30rpx 20rpx;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        transition-duration: .5s;
        .search_wrapper {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 100%;
            margin-bottom: 20rpx;
 
            .search_content {
                height: 74rpx;
                width: 100%;
                display: flex;
                justify-content: space-between;
                align-items: center;
                background-color: #EBF0F3;
                border-radius: 16rpx;
                border: 1rpx solid #DFE4E7;
                padding: 0 20rpx;
 
                .search_content_input {
                    flex: 1;
                    display: flex;
                    justify-content: flex-start;
                    align-items: center;
 
                    .search_icon {
                        margin-right: 10rpx;
                    }
 
                    .search_text {
                        color: #595E5F;
                        font-size: 32rpx;
                        letter-spacing: 1.8rpx;
                    }
                }
 
                .search_suffix {
                    width: 48rpx;
                    height: 48rpx;
 
                    image {
                        width: 100%;
                        height: 100%;
                    }
                }
            }
        }
 
        .panel_content {
            width: 100%;
            height: 100%;
        }
    }
    
    .search_radius {
        border-radius: 50rpx 50rpx 0 0;
        box-shadow: 0 -8rpx 30rpx rgba(109, 109, 109, 0.1);
    }
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue上下滑动(仿高德) 的相关文章

  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • Google App Engine:修改云运行环境

    我正在尝试部署一个使用自定义 Node js 服务器的 Next js 应用程序 我想将自定义构建变量注入应用程序 next config js const NODE ENV process env NODE ENV const envTy
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 使用 KnockoutJs 映射插件进行递归模板化

    我正在尝试使用以下方法在树上进行递归模板化ko映射 插入 http knockoutjs com documentation plugins mapping html 但我无法渲染它 除非我定义separate每个级别的模板 在以下情况下
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 经济复苏!!! ReportLinker调整2020-2027 IMU市场预测金额至335亿美元

    2022年10月 市场研究机构ReportLinker发布了2020 2027全球IMU市场预测报告 报告预测到2027年全球IMU市场金额将达到236亿美元 2020 2027年期间复合增长率为5 4 新冠过后 经济复苏 ReportLi
  • Python同时显示多张图片在一个画面中(两种方法)

    很多时候需要把很多图片同时显示到一个画面中 现在分享两个方法 这里我恰好拿之前写的爬取网上图片保存到本地的爬虫模型爬一些图片作为素材Python 爬虫批量爬取网页图片保存到本地 得到素材如下所示 现在让这些图片同时显示 方法一 subplo
  • [论文笔记]知识图谱+推荐系统

    仅作个人笔记 2021 3 22 2021 3 29 1 RippleNet Propagating User Preferences on the Knowledge Graph for Recommender Systems 看到一篇翻
  • 深入理解程序设计使用Linux汇编语言

    关于函数 4 1 由系统提供的函数称为原函数 或源语 因为其他一切都是建立在它们之上 在汇编语言中 原语通常就是系统调用 4 3 由于内存的结构 栈是从内存顶部开始向下增长的 当我们提到 栈顶 请记住这是栈内存的底部 movl esp ea
  • C语言 - 制作一个可以容纳一千人的本地通讯录

    本章目录 前言 一 菜单制作 二 创建通讯录 1 创建人员信息结构体 2 创建完整通讯录结构体 3 初始化通讯录 4 存放数据 5 判断空间容量 三 各功能的实现 1 增加人员信息的功能 2 按名字查找的功能 内部使用 3 删除人员信息的功
  • 手把手教你CIFAR数据集可视化

    CIFAR数据集介绍与获取 如同从小到的父母教我们识别每个物体是什么一样 除了看到的画面 父母会在旁边告诉看到的画面是什么 这种学习方式叫做监督学习 与此对应还有无监督学习 计算机也一样 数据集通常应该至少包含两部分内容 一个是图像 一个是
  • C语言:三目运算符 “?”号

    三目运算符的表示一般为 该运算符连接3个对象 是C语言中唯一一个三目运算符 又称条件运算符 它的一般形式如下 表达式a 表达式b 表达式c 其执行步骤如下 1 计算表达式a的值 2 如果表达式a的值为1 则执行表达式b 3 如果表达式b的值
  • 支付宝API支付使用文档--java《扫一扫支付》--demo但是封装高可用--改一改配置就拿走用!超详细!!有手就行!!!--spring +vue-调用支付宝的当面付的预创建接口

    支付宝API支付使用文档 java 扫一扫支付 demo但是封装高可用 改一改配置就拿走用 超详细 有手就行 上 修改官网配置类 一单成的博客 CSDN博客 阿丹 上一篇文章具体的描述和讲解了官方提供的配置类 以及如何使用注册开发沙箱 本篇
  • Linux系统图形界面,字符界面切换快捷键。启动图形界面服务。

    Ctrl Alt F3 启动字符界面 Ctrl Alt F7 启动图形界面 启动图形界面服务 cd etc init d service lightdm restart
  • 重装win8.1搜索不到 wifi

    这几天一直忙着研究装系统 毕竟自己是个小白 经常搞到深夜4点钟 今天终于算是有点眉目了 重新装完win8 1 电脑竟然搜索不到wifi 点开右下角那个图标 只有宽带连接这一个选项 于是到网上搜索 怎么解决 网上给了很多答案 基本都差不多 我
  • TCP/IP的三次握手、四次挥手

    本文通过图来梳理TCP IP协议相关知识 TCP通信过程包括三个步骤 建立TCP连接通道 传输数据 断开TCP连接通道 如图1所示 给出了TCP通信过程的示意图 上图主要包括三部分 建立连接 传输数据 断开连接 建立TCP连接很简单 通过三
  • Temporary failure in name resolution解决方法

    终端运行sudo su 输密码 vi etc reslov conf 输入i进入编辑模式 在文档末尾加入 nameserver 8 8 8 8 nameserver 114 114 114 114 按esc 输入 wq保存退出 执行 etc
  • 第八章 Oracle恢复内部原理(重置日志RESETLOGS)

    重置日志选项用于下列情形后的第一次打开数据库的时候 不完全恢复 基于备份控制文件的恢复 CREATE CONTROLFILE RESETLOGS 重置日志的最主要的作用就是丢弃不完全恢复中没有使用的重做日志并保证后续的恢复不再需要 为此 重
  • dll修复工具哪个比较好?修复工具介绍

    DLL 动态链接库 是Windows操作系统中非常重要的一部分 它们存储了各种软件应用程序所需的公共代码和数据 然而 随着时间的推移 电脑上的DLL文件可能会因为各种原因而损坏或丢失 导致系统出现错误 因此 修复DLL错误是一项非常重要的任
  • linux 下 C++ 与三菱PLC 通过MC Qna3E 二进制 协议进行交互

    西门子plc 有snap7库 进行交互 并且支持c 而且跨平台 但是三菱系列PLC并没有现成的开源项目 没办法只能自己拼接 我这里实现了MC 协议 Qna3E 帧 并使用二进制进行交互 pragma once include
  • HDU--1236:排名 (水题)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1236 2 程序源代码 HOJ 1236 排名 include
  • 软件测试框架理论知识

    一 软件测试的定义 1 软件测试的目标应该服从于软件项目的目标 软件测试通过更高效的方法和工具 提高软件开发的效率和质量 2 在规定的条件下 对软件进行审核 运行 评估 验证软件系统是否满足需求规格说明书 3 预防 发现 跟踪软件缺陷 提高
  • Unity篇:加快unity导入工程速度-Cache server链接

    1 已有unity打开 编辑窗口选择点击edit edit下拉展示的列表里打开Preferences 2 选择Cache server界面 Cache server Mode 选择remote 举例 输入192 168 15 131或者19
  • 目标检测中的mAP(mean Average Precision)快速理解

    前言 最近开始接触目标检测 object detection 但是对于衡量算法好坏的mAP Mean Average Precision 并不太理解 经过了一番整理 下面我们就来看看什么是mAP 在目标检测算法中 像是Faster R CN
  • vue上下滑动(仿高德)

    效果图 需求 一个页面底部对应一块区域 底部的区域可以上下滑动到顶部 可以来回上下滑动延伸 如上所述 代码