在IE浏览器下fixed定位容器随着滚动条出现抖动问题(实测有效)

news/2025/2/14 7:00:55/

在ie浏览器下使用fixed定位的容器随着滚动条滚动出现晃动,这种问题比较常见,以下我们给两个解决方案。

方案一

把滑动滚动取消

方案二

在vue组件的created生命周期中添加此代码

document.addEventListener('wheel',function(event) {event.preventDefault()const wd = event.deltaYconst csp = window.document.documentElement.scrollTopwindow.scrollTo(0, wd + csp)
})

延申学习

一、事件处理器的绑定

对于onwheel事件,可以使用addEventListener()方法来将事件处理程序绑定到元素上。示例如下:

<script>const div = document.querySelector('div');div.addEventListener('wheel', function(event) {console.log('onwheel事件:', event);});
</script>

二、事件对象的属性

onwheel事件传递的事件对象中包含以下属性:

  • deltaX:表示鼠标滚轮在X轴方向上滚动的量,单位为像素。
  • deltaY:表示鼠标滚轮在Y轴方向上滚动的量,单位为像素。
  • deltaZ:表示鼠标滚轮在Z轴方向上滚动的量,单位为像素。该属性只在一些高级设备中存在。
  • deltaMode:表示deltaX、deltaY和deltaZ属性的单位。可能的值有:DOM_DELTA_PIXEL(像素)、DOM_DELTA_LINE(行)、DOM_DELTA_PAGE(页)。

 三、兼容性

在兼容性上,onwheel比onmousewheel兼容性更高。onmousewheel事件只在Webkit内核的浏览器中存在,而onwheel事件则可以在大部分现代浏览器中正常运行。

四、事件触发频率

onmousewheel事件的触发频率要高于onwheel事件。

在Chrome浏览器中,测试了10000次事件触发,结果显示onmousewheel事件在1秒内平均能够被触发43次,而onwheel事件只有4次。

五、阻止默认事件的发生

event.preventDefault()

再延申学习阻止默认事件会带来新的需求

需求是这样的,有一个元素,比如div,通过鼠标滚动,实现该元素包含图片的放大缩小,即:在该元素上滚动鼠标滚轮,则滚动效果只在该元素上起作用,而不影响界面(即浏览器)的滚动条。

何为滚轮事件的默认行为:

     解释:在某个元素上滚动鼠标滚轮,比如下图中的id等于div1、div2的div元素,有两种情况:

               1、元素上没有滚动条,比如:div1,则滚动滚轮时,由于该元素上没有滚动条,则不会出现滚动效果,而右侧浏览器的滚动条会出现相应的滚动效果

               2、元素上有滚动条,比如:div2,则滚动滚轮时,只有div2元素出现滚动效果,而右侧浏览器的滚动条不做相应的滚动
 

 

因此要实现只在元素上的滚动效果,需要避免上面默认行为中的第一种情况:即该元素上未出现滚动条,但是又要滚动鼠标,则只需要阻止该元素wheel事件的默认行为:e.preventDefault,分以下两种情况实现:

1、给该元素添加wheel事件,并阻止其默认行为     

     let div1 = document.querySelector('#div1');div1.addEventListener('wheel', zoomIn, false);function zoomIn(event) {event.preventDefault();}  

 2、 给document添加wheel事件,并阻止其默认行为

     document.addEventListener('wheel', zoomIn, {passive: false, useCapture: false});function zoomIn(event) {event.preventDefault();}  passive必须有,且值为false,否则,chrome下会报错:[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passiveuseCapture为true和false都可以

 passive可以参考


     https://blog.csdn.net/ET1131429439/article/details/96200037
     https://blog.csdn.net/tengxy_cloud/article/details/52858742

wheel事件参考

    https://developer.mozilla.org/zh-CN/docs/Web/API/Element/wheel_event

    https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event
 


http://www.ppmy.cn/news/1157451.html

相关文章

react闪屏问题以及useEffect和useLayoutEffect的对比使用

二者对比 useEffect()是在渲染被绘制到屏幕之后执行的&#xff0c;是异步的&#xff1b;useLayoutEffect()是在渲染之后但在屏幕更新之前执行的&#xff0c;是同步的。 二者均是等待jsx执行完毕后再执行&#xff0c;但useLayoutEffect()在useEffect()之前触发。 大部分情况下…

ubuntu20 安装 cmake 3.27

1. 下载cmake3.27 建议从cmake官网下载安装&#xff0c;虽然比较慢&#xff0c;但从清华镜像里下载的cmake文件不全。 我下载的是&#xff1a;cmake-3.27.7.tar.gz 博客 ubuntu安装cmake的三种方法&#xff08;超方便&#xff01;&#xff09;-CSDN博客 里面提供了三种方法&am…

什么是人事RPA?人事RPA解决什么问题?人事RPA实施难点在哪里?

每家公司人力资源部门每天需要筛选适合自己公司岗位要求的人才并与之沟通邀约面试、每月全公司员工的考勤状态核对、业绩考核核对、入离职手续办理、新员工培训等等&#xff0c;每项业务流程都由人手操作&#xff0c;效率极低、流程繁琐、费时费力。HR部门每天面对的业务数据量…

MySQL学习(一)——简介以及SQL语句

文章目录 1. MySQL介绍1.1 数据库概述1.2 关系型数据库 2. SQL2.1 SQL通用规范2.2 DDL2.2.1 数据库操作2.2.2 创建和查询表2.2.3 修改表2.2.4 数据类型2.2.5 DataGrip使用 2.3 DML2.3.1 添加数据2.3.2 更新和删除 2.4 DQL2.4.1 基础查询2.4.2 条件查询2.4.3 聚合函数2.4.4 分组…

基于OFDM通信系统的PAPR抑制算法matlab仿真,对比IPTS,OPTS,CEPTS三种算法

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、IPTS算法 4.2、OPTS算法 4.3、CEPTS算法 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 for k1:Nframesif mod(k,10) 0k/10end%产生…

深圳寄包裹到德国

深圳&#xff0c;作为全球最发达的城市之一&#xff0c;以其高效的物流服务在全球范围内享有盛名。如果你正在寻找一种方式将包裹从深圳寄送到德国&#xff0c;那么本文将为你提供详细的步骤和建议。 第一步&#xff1a;了解国际邮寄的基本信息 首先&#xff0c;你需要了解包裹…

算法通过村第十四关-堆|黄金笔记|中位数

文章目录 前言数据流中的中位数的问题总结 前言 提示&#xff1a;我独自度过了太多的时光&#xff0c;沉默已成一种习惯。 帕瑞尔马卡姆《夜航西飞》 这个是一个比较难的题目&#xff0c;要不尝试一下看看。 数据流中的中位数的问题 参考题目地址&#xff1a;295. 数据流的中位…

Python3无法调用Sqlalchemy解决(mysqldb)

原因 在安装Sqlalchemy后运行程序报错 无法导入mysqldb&#xff0c;缺失模块 ImportError: No module named ‘MySQLdb’ 既然缺少 MySQLdb 这个模块&#xff0c;尝试按照正常的想法执行 pip install MySQLdbpip install mysql-python 应该能解决&#xff0c;但是却找不到…