手动实现h5移动端点击全屏按钮横屏展示图片,左右滑动切换,处理页面会随着手指滑动问题

页面提供全屏按钮,全屏展示的容器

<div class="container">
	<button @click="openSwiper">点击全屏查看</button>
	
	 <!-- 大图 -->
	<div
		class="full"
		v-if="showSwiper"
		@touchstart="handleTouchStart"
		@touchmove="handleTouchMove"
		@touchend="handleTouchEnd"
		>
		<img :src="currentItem.imageUrl" alt="" />
	</div>
</div>

在data中定义需要的数据

  data() {
    return {
      imgList: [],//接口获取的图片列表
      currentIndex: 0,//当前展示的图片index
      currentItem: {},//当前展示的图片本身
      showSwiper: false,//控制大图展示与否
      startY: 0, // 触摸开始时的Y坐标
      currentY: 0, // 触摸移动时的Y坐标
      threshold: 50, // 触发滑动的阈值
    };
  },

在methods中定义实现的函数

    openSwiper() {
      this.showSwiper = true;
    },
     handleTouchStart(event) {
      this.startY = event.touches[0].clientY;
      this.currentY = this.startY;
    },
    handleTouchMove(event) {
      this.currentY = event.touches[0].clientY;
    },
    handleTouchEnd() {
      const distance = this.currentY - this.startY;
      if (Math.abs(distance) > this.threshold) {
        if (distance < 0) {
          // 左滑
          if (this.currentIndex === this.imgList.length - 1) {
            this.currentIndex = 0;
          } else {
            this.currentIndex += 1;
          }
        } else {
          // 右滑
          if (this.currentIndex === 0) {
            this.currentIndex = this.imgList.length - 1;
          } else {
            this.currentIndex -= 1;
          }
        }
        this.currentItem = this.imgList[this.currentIndex];
      }
    },

样式


  .full {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #fff;
    z-index: 99;
    display: flex;
    justify-content: center;
    align-items: center;

    img {
      width: 100%;
      transform: rotate(90deg) scale(1.5) translate(0, 3vw);  //图片旋转90度,缩放,平移位置
    }
  }

最终实现效果

可以横屏状态下左右滑动切换图片
在这里插入图片描述

手机端滑动查看时发现,元素会随着手指滑动方向移动

解决方案

页面根元素上添加touch-action: none;

.container{
	touch-action: none;
}

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

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

相关文章

RHEL 网络配置(Linux网络服务器 09)

0 引入 对于Linux系统的网络管理员来说&#xff0c;掌握Linux服务器的网络配置是至关重要的&#xff0c;同时管理远程主机也是网络管理员必须掌握的。这些是后续网络服务配置的基础。 本文&#xff0c;我们讲解如何使用nmtui命令配置网络参数&#xff0c;以及通过nmtui命令查…

【Qt】Macbook M1下载安装

文章目录 一、下载Xcode命令行工具二、在Cion中配置编译器三、安装Qt四、配置qmake环境五、创建Qt项目 博主已经下载了Clion&#xff0c;所以本文是将qt配置到Clion上 本博客所写的教程有一定的问题&#xff0c;因为我在官网下载后发现有一些所需的包是没有的&#xff0c;不知道…

UE5 样条线组件(未完待续)

按点生成模型 按距离生成 spline mesh 可缩放spline mesh

Linux(CentOS)项目总结(前后端分离)

项目情况&#xff1a; 前端开发&#xff1a;vue3 vite ts VSCode后端开发&#xff1a;JDK17 Spring Boot 3 Mybatis Maven IDEA数据库&#xff1a;MySQL8.4.3 SQLyog代码管理&#xff1a;Git虚拟环境&#xff1a;VMware远程登录&#xff1a;FinalShell服务器操作系统&…

【C++】 C++游戏设计---五子棋小游戏

1. 游戏介绍 一个简单的 C 五子棋小游戏 1.1 游戏规则&#xff1a; 双人轮流输入下入点坐标横竖撇捺先成五子连线者胜同一坐标点不允许重复输入 1.2 初始化与游戏界面 初始化界面 X 输入坐标后 O 输入坐标后 X 先达到胜出条件 2. 源代码 #include <iostream> #i…

A算法详解(go实现)

A*算法详解&#xff08;go实现&#xff09; 推荐一位大佬的文章&#xff0c;建议可以去看看https://hogwartsrico.github.io/2016/03/11/AStarPathFinding/index.html 下面贴出来文章中用于举例的网站&#xff1a; https://anvaka.github.io/ngraph.path.demo/#?graphamste…

丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn

文章目录 &#x1f34b;1 引言&#x1f34b;2 平台优势&#x1f34b;3 丹摩平台服务器配置教程&#x1f34b;4 实操案例&#xff08; Faster-rcnn 项目&#xff09;&#x1f34b;4.1 文件处理&#x1f34b;4.2 环境配置&#x1f34b;4.3 训练模型&#x1f34b;4.4 数据保存并导…

Java poi 模板导出Word 带图片

Java poi 模板导出Word 带图片 重点&#xff01;&#xff01;&#xff01; 官方文档&#xff1a;https://deepoove.com/poi-tl/#_maven 最终效果 模板 其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。 Maven依赖 <poi.version>4.1.2</poi.version>…

LabVIEW车辆侧翻预警系统

在工业和实验室环境中&#xff0c;搬运车辆、叉车和特种作业车辆经常在负载和高速转弯过程中发生侧翻事故&#xff0c;导致设备损坏和人员伤害。为提高工作环境的安全性&#xff0c;开发了一种基于LabVIEW的工业车辆侧翻预警系统&#xff0c;能够实时监测车辆状态并发出预警&am…

Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。 UI 双击和长按 上一篇文章实现了拖拽接口&#xff0c;这篇文章来实现 UI 的双击和长按。 双击 创建脚本 UIDoubleClick.cs&#xff0c;创建一个 Image&#xff0c;并把脚本挂载到它身上。 在脚本中&#xff0c;继承 IPointerClickHa…

计算机网络——SDN

分布式控制路由 集中式控制路由

深入浅出rust内存对齐

在 Rust 中&#xff0c;内存对齐是一个重要的概念&#xff0c;它涉及到数据在内存中的存储方式&#xff0c;以及如何优化内存访问的效率。往往一门语言的内存布局以及对齐方式决定了一门语言的性能&#xff0c;因此学会并深入理解rust中内存布局会让我们写出高性能的rust代码&a…

ARM64环境使用docker-compose进行ElasticSearch8集群部署

环境规划 主机IP系统ES版本CPU架构用户名密码192.168.174.18Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64elasticllodyi4TMmZD192.168.174.218Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64192.168.174.112Ubuntu 22.04.4 LTSelasticsearch:8.10.4ARM64 概念&#xff1a; no…

28.医院管理系统(基于springboot和vue)

目录 1.系统的受众说明 2. 相关技术和开发环境 2.1 相关技术 2.1.1 Java语言 2.1.2 HTML、CSS、JavaScript 2.1.3 Redis 2.1.4 MySQL 2.1.5 SSM框架 2.1.6 Vue.js 2.1.7 SpringBoot 2.2 开发环境 3. 系统分析 3.1 可行性分析 3.1.1 经济可行性 3.1.2 技术…

高性能分布式缓存Redis-高可用部署

一、主从架构搭建 为什么要进行主从架构搭建&#xff0c;一台redis不行吗&#xff1f; ①、持久化后的数据只在一台机器上&#xff0c;因此当硬件发生故障时&#xff0c;比如主板或CPU坏了&#xff0c;这时候无法重启服务器&#xff0c;有什么办法可以保证服务器发生故障时数…

Profinet转CanOpen网关连接与CanOpen协议磁轨道实现高效连接

该项目旨在展示如何通过开疆智能Profinet转Canopen网关实现西门子1200PLC与磁轨道之间的连接。以下是项目实施的步骤概要&#xff1a;安装必要的GSD文件到西门子组态软件中&#xff0c;确保系统能够识别并使用Profinet转Canopen网关设备。 进行设备配置&#xff0c;包括将PLC和…

openai Realtime API (实时语音)

https://openai.com/index/introducing-the-realtime-api/ 官方demo https://github.com/openai/openai-realtime-console 官方demo使用到的插件 https://github.com/openai/openai-realtime-api-beta?tabreadme-ov-file 装包配置 修改yarn.lock 这个包是从github下载的 &q…

Docker--Docker是什么和对Docker的了解

Docker 的本质 Docker的本质是LXC&#xff08;Linux容器&#xff09;之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。 Docker通过虚拟化技术&#xff0c;将代码、依赖项和运行环境打包成一个容器&#xff0c;并利用隔离机制来使得容器之间互相独立、…

【报错记录】Steam迁移(移动)游戏报:移动以下应用的内容失败:XXX: 磁盘写入错误

前言 由于黑神话悟空&#xff0c;导致我的2TB的SSD系统盘快满了&#xff0c;我又买了一块4TB的SSD用来存放游戏&#xff0c;我就打算把之前C盘里的游戏移动到D盘&#xff0c;结果Steam移动游戏居然报错了&#xff0c;报的还是“磁盘写入错误”&#xff0c;如下图所示&#xff…

攻防世界37-unseping-CTFWeb

攻防世界37-unseping-CTFWeb <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("…