HTML+JS+CSS 鼠标上下移动页面(非滚动条)

HTML+JS+CSS 鼠标上下移动页面(非滚动条)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Mouse Drag Scroll - IE11 Compatible</title><style>body {height: 2000px;/* 为了方便测试滚动效果,设置一个较长的页面 *//* 使用自定义的鼠标指针图片,这里假设图片名为 grab.cur */cursor: url('file:///C:/grab.cur'), default;}/* 定义按下鼠标左键时的鼠标指针样式 */body.dragging {/* 使用自定义的鼠标指针图片,这里假设图片名为 grabbing.cur */cursor: url('file:///C:/grabbing.cur'), default;}</style>
</head><body><!-- 这里可以添加具体的页面内容 --><h1>鼠标拖动滚动页面示例 - 兼容 IE11</h1><script>// 定义变量来跟踪鼠标状态和初始位置var isDragging = false;var startY = 0;var initialScrollTop = 0;var body = document.body;// 获取文档对象var doc = document.documentElement || document.body;// 监听鼠标按下事件if (document.attachEvent) {document.attachEvent('onmousedown', mouseDownHandler);} else {document.addEventListener('mousedown', mouseDownHandler);}function mouseDownHandler(event) {event = event || window.event;// 只有按下鼠标左键时才进行操作if ((event.which && event.which === 1) || (event.button && event.button === 1)) {// 判断是否点击在滚动条上if (isClickOnScrollbar(event)) {return; // 如果点击在滚动条上,不执行后续拖动逻辑}isDragging = true;// 记录鼠标按下时的垂直位置startY = event.clientY;// 记录当前页面的滚动位置initialScrollTop = doc.scrollTop;// 添加 dragging 类,改变鼠标指针样式addClass(body, 'dragging');}}// 判断鼠标是否点击在滚动条上function isClickOnScrollbar(event) {// 获取窗口宽度var windowWidth = window.innerWidth;// 获取文档元素宽度var docWidth = doc.clientWidth;// 计算滚动条宽度var scrollbarWidth = windowWidth - docWidth;// 判断鼠标点击的水平位置是否在滚动条范围内return event.clientX >= windowWidth - scrollbarWidth;}// 监听鼠标移动事件if (document.attachEvent) {document.attachEvent('onmousemove', mouseMoveHandler);} else {document.addEventListener('mousemove', mouseMoveHandler);}function mouseMoveHandler(event) {event = event || window.event;if (isDragging) {// 计算鼠标垂直移动的距离var deltaY = event.clientY - startY;// 根据鼠标移动距离来滚动页面doc.scrollTop = initialScrollTop - deltaY;}}// 监听鼠标松开事件if (document.attachEvent) {document.attachEvent('onmouseup', mouseUpHandler);} else {document.addEventListener('mouseup', mouseUpHandler);}function mouseUpHandler() {// 停止拖动状态isDragging = false;// 移除 dragging 类,恢复鼠标指针样式removeClass(body, 'dragging');}// 监听鼠标离开窗口事件,防止鼠标移出窗口后仍在拖动if (document.attachEvent) {document.attachEvent('onmouseleave', mouseLeaveHandler);} else {document.addEventListener('mouseleave', mouseLeaveHandler);}function mouseLeaveHandler() {isDragging = false;// 移除 dragging 类,恢复鼠标指针样式removeClass(body, 'dragging');}// 兼容 IE11 的添加类名函数function addClass(element, className) {if (element.className.indexOf(className) === -1) {if (element.className === '') {element.className = className;} else {element.className += ' ' + className;}}}// 兼容 IE11 的移除类名函数function removeClass(element, className) {var classNames = element.className.split(' ');var newClassNames = [];for (var i = 0; i < classNames.length; i++) {if (classNames[i] !== className) {newClassNames.push(classNames[i]);}}element.className = newClassNames.join(' ');}</script>
</body></html>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国国防部(DoD)SysML v2迁移指南项目

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 分享一篇SysML v1向SysML v2迁移的资料。 下载地址&#xff1a;https://ndia.dtic.mil/wp-content/uploads/2023/systems/Thurs_1560710_Stirk.pdf 核心内容用DeepSeek整理如下&#…

在vscode中编译运行c语言文件,配置并运行OpenMP多线程并行程序设计

1.下载安装vscode Visual Studio Code - Code Editing. Redefined 2.安装vscode扩展 打开vscode,按ctrl+shift+x,打开扩展,搜索c/c++,下载相应的扩展 3.下载MinGW-w64 MinGW-w64 提供了 GNU 编译器集合,可以编译c/c++文件 这里下载见我的资源,可直接下载 把压缩包解压…

Jenkins protoc: command not found

个人博客地址&#xff1a;Jenkins protoc: command not found | 一张假钞的真实世界 在使用Jenkins编译Hadoop3.1.2时报错信息如下&#xff1a; [INFO] --- hadoop-maven-plugins:3.1.2:protoc (compile-protoc) hadoop-common --- [WARNING] [protoc, --version] failed: j…

Linux红帽:RHCSA认证知识讲解(二)配置网络与登录本地远程Linux主机

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;二&#xff09;配置网络与登录本地远程Linux主机 前言一、使用命令行&#xff08;nmcli 命令&#xff09;配置网络&#xff0c;配置主机名第一步第二步修改主机名称 二、使用图形化界面&#xff08;nmtui 命令&#xff09;配…

【CMake 教程】基础使用教程(一)

一、准备 1. CMake 官方下载网址 2. 文件目录结构 MySimpleProject ├── CMakeLists.txt # CMake 配置文件 └── main.cpp # 主程序源码我们在 MySimpleProject 目录中创建 CMakeLists.txt 和 main.cpp 两个空白文件。 二、CMake 简单概念 要学会使用 CMake&#xff…

智能网络感知,打造极致流畅的鸿蒙原生版中国移动云盘图文体验

背景 中国移动云盘&#xff08;原“和彩云网盘”&#xff09;是中国移动重磅推出的安全、智能、不限速、移动用户免流的智能云盘&#xff0c;致力于成为5G时代用户个人与家庭的数字资产管理中心&#xff0c;是中国移动继语音、短信、流量后的“第四项基础服务”。 照片、音视…

Windows 11【1001问】Windows 11系统硬件配置要求

Windows 11 的设计目标是让用户更贴近自己喜欢的内容&#xff0c;在其发布之际&#xff0c;计算机在连接、创作以及游戏体验方面扮演了更加核心的角色。在设定 Windows 11 的最低系统要求时&#xff0c;我们依据三个关键原则来指导决策&#xff0c;以确保用户能够获得卓越的使用…

SQL笔记#函数、谓词、CASE表达式

目录 一、各种各样的函数 1、函数的种类 2、算术函数 ABS——绝对值 MOD——取余 ROUND——四舍五入 3、字符串函数 ||——拼接 LENGTH——字符串长度 LOWER——小写转换 REPLACE——字符串的替换 SUBSTR——字符串的截取 UPPER——大写转换 4、日期函数 CURRENT_DATE——…

为人工智能驱动的交通研究增强路面传感器数据采集

论文标题 英文标题&#xff1a;Enhancing Pavement Sensor Data Harvesting for AI-Driven Transportation Studies 中文标题&#xff1a;为人工智能驱动的交通研究增强路面传感器数据采集 作者信息 Manish Kumar Krishne Gowda Purdue University, 465 Northwestern Avenue,…

简讯:Rust 2024 edition and v1.85.0 已发布

详见 https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html 升级方法&#xff1a;rustup update stable

clickhouse-介绍、安装、数据类型、sql

1、介绍 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&#xff08;On-Line A…

pycharm技巧--鼠标滚轮放大或缩小 Pycharm 字体大小

1、鼠标滚轮调整字体 设置 Ctrl 鼠标滚轮调整字体大小 备注&#xff1a; 第一个是活动窗口&#xff0c;即缩放当前窗口 第二个是所有编辑器窗口&#xff0c;即缩放所有窗口的字体 2、插件 汉化包&#xff1a; Chinese Simplified 包

R语言安装教程(附安装包)R语言4.3.2版本安装教程

文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手&#xff0c;还是希望更新知识体系的专业人士&#xff0c;只要按照本…

从零开始玩转TensorFlow:小明的机器学习故事 5

图像识别的挑战 1 故事引入&#xff1a;小明的“图像识别”大赛 小明从学校里听说了一个有趣的比赛&#xff1a;“美食图像识别”。参赛者需要训练计算机&#xff0c;看一张食物照片&#xff08;例如披萨、苹果、汉堡等&#xff09;&#xff0c;就能猜出这是什么食物。听起来…

01 冲突域和广播域的划分

目录 1、冲突域和广播域的划分 1.1、冲突域 1.2、广播域 1.3、对比总结 1.4、冲突域与广播域个数计算例题 2、交换机和路由器的结构 2.1、交换机的结构 2.2、路由器的结构 1、冲突域和广播域的划分 1.1、冲突域 冲突域是指网络中可能发生数据帧冲突的物理范围。当多…

[C++]使用纯opencv部署yolov12目标检测onnx模型

yolov12官方框架&#xff1a;sunsmarterjie/yolov12 【算法介绍】 在C中使用纯OpenCV部署YOLOv12进行目标检测是一项具有挑战性的任务&#xff0c;因为YOLOv12通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTorch模型。然而&#xff…

神经网络八股(3)

1.什么是梯度消失和梯度爆炸 梯度消失是指梯度在反向传播的过程中逐渐变小&#xff0c;最终趋近于零&#xff0c;这会导致靠前层的神经网络层权重参数更新缓慢&#xff0c;甚至不更新&#xff0c;学习不到有用的特征。 梯度爆炸是指梯度在方向传播过程中逐渐变大&#xff0c;…

zyNo.26

[GXYCTF2019]Ping Ping Ping&#xff08;Web&#xff09; 传/&#xff1f;ip1有ping回显&#xff0c;说明后端可能通过php参数接受了ip参数&#xff0c;并且拼接到了最终执行的命令里形成了ping -c 3$ip&#xff0c;这样可能存在一个命令注入漏洞 要判断是否符合 ping -c 3$ip …

轻量级SDK,大能量:EasyRTC重塑嵌入式设备音视频体验

在智能硬件与物联网迅猛发展的今天&#xff0c;嵌入式设备的音视频通讯能力正变得愈加关键。然而&#xff0c;受限于硬件资源&#xff0c;尤其是Flash存储空间的不足&#xff0c;传统的音视频通讯方案往往难以在嵌入式设备上实现高效集成。EasyRTC凭借其轻量级SDK和先进的技术架…

算法日常刷题笔记(2)

为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第二篇笔记 笔记时间为2月17日到2月23日 第一天 找到初始输入字符串 找到初始输入字符串 Ihttps://leetcode.cn/problems/find-the-original-typed-string-i/ Alice 正在她的电脑上输入一个字符串。但是她打字技…