BOM---scroll系列

news/2024/11/14 13:44:17/

目录

一、scroll系列的属性

案例:仿淘宝固定右侧侧边栏


一、scroll系列的属性

scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。

 注意:

1、实际的宽度和高度要考虑内容超出边框的情况,当超出时,包括超出部分的长度。

2、如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发 onscroll 事件。

 

案例:仿淘宝固定右侧侧边栏

1.原先侧边栏是绝对定位

2. 当页面滚动到一定位置,侧边栏改为固定定位

3. 页面继续滚动,会让 返回顶部显示出来

案例分析:

  1. 需要用到页面滚动事件 scroll  因为是页面滚动,所以事件源是 document
  2. 滚动到某个位置,就是判断页面被卷去的上部值。
  3. 页面被卷去的头部:可以通过window.pageYOffset 获得  如果是被卷去的左侧 window.pageXOffset
  4. 注意,元素被卷去的头部是 element.scrollTop  , 如果是页面被卷去的头部 则是 window.pageYOffset
  5. 其实这个值 可以通过盒子的 offsetTop 可以得到,如果大于等于这个值,就可以让盒子固定定位了

实现效果:

 

 实现代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>.slider-bar {position: absolute;left: 50%;top: 300px;margin-left: 600px;width: 45px;height: 130px;background-color: pink;}.w {width: 1200px;margin: 10px auto;}.header {height: 150px;background-color: purple;}.banner {height: 250px;background-color: skyblue;}.main {height: 1000px;background-color: yellowgreen;}span {display: none;position: absolute;bottom: 0;}</style>
</head><body><div class="slider-bar"><span class="goBack">返回顶部</span></div><div class="header w">头部区域</div><div class="banner w">banner区域</div><div class="main w">主体部分</div><script>//1. 获取元素var sliderbar = document.querySelector('.slider-bar');var banner = document.querySelector('.banner');// banner.offestTop 就是被卷去头部的大小 一定要写到滚动的外面var bannerTop = banner.offsetTop// 当我们侧边栏固定定位之后应该变化的数值var sliderbarTop = sliderbar.offsetTop - bannerTop;// 获取main 主体元素var main = document.querySelector('.main');var goBack = document.querySelector('.goBack');var mainTop = main.offsetTop;// 2. 页面滚动事件 scrolldocument.addEventListener('scroll', function() {// console.log(11);// window.pageYOffset 页面被卷去的头部// console.log(window.pageYOffset);// 3 .当我们页面被卷去的头部大于等于了 172 此时 侧边栏就要改为固定定位if (window.pageYOffset >= bannerTop) {sliderbar.style.position = 'fixed';sliderbar.style.top = sliderbarTop + 'px';} else {sliderbar.style.position = 'absolute';sliderbar.style.top = '300px';}// 4. 当我们页面滚动到main盒子,就显示 goback模块if (window.pageYOffset >= mainTop) {goBack.style.display = 'block';} else {goBack.style.display = 'none';}})</script>
</body></html>

页面被卷去的头部兼容性解决方案

需要注意的是,页面被卷去的头部,有兼容性问题,因此被卷去的头部通常有如下几种写法:

1. 声明了 DTD,使用 document.documentElement.scrollTop

2. 未声明 DTD,使用  document.body.scrollTop

3. 新方法 window.pageYOffset 和 window.pageXOffset,IE9 开始支持

 function getScroll() {return {left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft||0,top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0};} 
使用的时候  getScroll().left

参考:黑马程序员

 


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

相关文章

【springMVC篇1】初识springMVC

目录 一、什么是springMVC 1.1springMVC定义&#xff1a; 模型&#xff08;Model) 视图(View) 第一大类&#xff1a;服务器端的视图 第二大类&#xff1a;客户端的视图 springMVC的工作流程 1.2 MVC和springMVC之间的关系 二、学习SpringMVC的目标 2.1实现用户和程…

【python 定时任务】Python apscheduler 定时调度框架

在开发 Python 应用程序时,我们常常需要编写定时任务。例如,我们可能需要每天自动发送一份报告、每小时清理一次临时文件等。为了实现这些功能,我们可以使用 Python 的 apscheduler 模块。 安装 apscheduler 要使用 apscheduler,你需要先安装它。你可以使用 pip 命令来安装…

集成华为运动健康服务干货总览

在接入华为运动健康服务的过程中你是否遇到过权限申请有困难、功能不会用的情况&#xff1f; 本期超强精华帖&#xff0c;一帖汇总集成华为运动健康服务你可能需要的各类干货&#xff0c;还不赶紧收藏起来!开发有困难&#xff0c;随时可查阅~ 如果你有感兴趣或想进一步了解的…

Adobe:当创意工作遇上AIGC ,人工智能还是取代了设计师?

近期以来&#xff0c;GPT-4热度居高不下&#xff0c;国内首部AI深度参与的动画电影也有望诞生&#xff0c;这也使得传媒影视板块反复活跃表现&#xff0c;影视业内资深设计师也表示&#xff0c;AI技术可以应用在剧本创作、刻画人物画像&#xff0c;甚至实现AI换脸等&#xff0c…

关于镜头畸变问题的总结

1、问题背景最近在做的项目有畸变校正的需求&#xff0c;但测试镜头畸变时&#xff0c;发现畸变的形态不太正常。如下图所示中间向内凹、四周向外凸&#xff0c;感觉像是曲线型的。但常见的畸变就两种&#xff0c;一种是向内收的枕形畸变&#xff0c;另一种是向外凸的桶形畸变&…

O2O、C2C、B2B、B2C是什么意思

一.O2O、C2C、B2B、B2C的区别在哪里&#xff1f; o2o 是 online to offline 分为四种运营模式 1.online to offline 是线上交易到线下消费体验 2.offline to online 是线下营销到线上交易 3.offline to online to offline 是线下营销到线上交易再到线下消费体验 4.online …

代理服务器与CDN的概念

代理服务器 特点&#xff1a;本身不产生内容&#xff0c;处于中间位置转发上下游的请求和响应 面向下游的客户端&#xff1a;它是服务器面向上游的服务器&#xff1a;它是客户端 正向代理&#xff1a;代理的对象是客户端 隐藏客户端身份绕过防火墙&#xff08;突破访问限制&am…

Thinkphp 6.0模版的比较和定义标签

本节课我们来学习一下模版标签中比较标签和定义标签的用法&#xff1b; 一&#xff0e;比较标签 1. {eq}..{/eq}标签&#xff0c;比较两个值是否相同&#xff0c;相同即输出包含内容&#xff1b; {eq namename valueMr.Lee} 李先生 {/eq} 2. 属性 name 里是一个变量&#xff0…