Javascript学习之路:页面位移、大小和位置属性整理

本文详细解析了浏览器窗口的滚动、大小、定位属性,包括window对象的滚动位移方法、HTML元素的scrollTop和滚动区域属性,以及Screen对象和event对象中的坐标信息。特别关注了不同浏览器的行为差异。

🤞🤞 一、window

window 滚动位移属性

  • window.scroll(X,Y) 滚动数不叠加
  • window.scrollTo(X,Y) 滚动数不叠加
  • window.scrollBy(X,Y) 滚动数叠加
  • window.scrollY / Firefox、Chrome、Opera均支持,IE不支持 忽略DOCTYPE定义规则

window窗口大小属性

  • window.innerheight 返回窗口文档显示区的高度
  • window.innerwidth 返回窗口文档显示区的宽度
  • window.outerheight 返回窗口的外部高度
  • window.outerwidth 返回窗口的外部宽度
  • window.screen.height/width 显示器的完整分辨率
  • screen.availHeight/Width 显示器去除任务栏的剩余分辨率

调整大小

  • resizeTo(newWidth,newHeight)
  • resizeBy(changeWidth,changeHeight)

window窗口定位属性

  • window.pageXOffset 设置或返回当前页面相对于窗口显示区左上角的x位置
  • window.pageYOffset 设置或返回当前页面相对于窗口显示区左上角的y位置 / IE9+、Firefox、Chrome、Opera均支持该方式获取页面,并且会忽略DOCTYPE定义规则
  • window.screenLeft 网页正文部分左||window.screenX 左上角x坐标
  • window.screenTop 网页正文部分上 ||window.screenY 左上角y坐标
  • event.screenX/Y 事件发生时,鼠标距离显示器左上角的坐标

移动window窗口位置

  • window.moveTo(newX,newY)
  • window.moveBy(changeX,changeY)

🤞🤞二、Document

HTML元素上的scrollTop属性

  • document.documentElement.scrollTop
    如果未定义DOCTYPE文档头,所有浏览器都支持docume.body.scrollTop属性获取滚动高度
    如果页面定义了DOCTYPE文档头,那么HTML元素上的scrollT属性在IE、Firefox、Opera(presto内核)下都可以获取滚动高度值,而在Chrome和Safari下其值为0**。
  • document.documentElement.scrollLeft 设置和获取页面文档向右滚动过的像素数
  • document.documentElemnt.scrollTop 设置和获取页面文档向下滚动过的像素数
  • document.documentElement.scrollWidth html元素对象的滚动宽度
  • document.documentElement.scrollHeight 即html元素对象的滚动高度

实际开发中的写法

var _scrollLeft=window.scrollX||window.pageXOffset||document.documentElement.scrollLeft
var _scrollLeft=window.scrollY||window.pageYOffset||document.documentElement.scrollTop

元素位置属性 el

  • el.clientTop:该元素对象的上边框的宽度
    • document.ducumentElement.clientTop 获取html元素对象的上边框的宽度
  • el.clientLeft: 该元素对象的左边框的宽度
    • document.documentElement.clientLeft 获取html元素对象的左边框的宽度
  • el.clientWidth: 元素内容的宽度,不包括边框
  • el.clientHegiht: 元素内容的高度
  • el.offsetLeft: 元素左边框到窗口左边界的距离
    • document.documentElement.offsetLeft html元素的margin
  • el.offsetTop:元素上边框到窗口上边界的距离
    • document.documentElement.offsetTop html元素的margin
  • 在IE中,offsetLeft和offsetTop的值始终为0。

el.offsetWidth: 左外边框至右外边框的距离

el.offsetHeight: 上外边框至下外边框的距离

元素位置属性 body

  • document.body.clientWidth 网页可见区域宽
  • document.body.clientHeight 网页可见区域高
  • document.body.offsetWidth 网页可见区域宽(包括边线的宽)
  • document.body.offsetHeight 网页可见区域高(包括边线的高)
  • document.body.scrollWidth 网页正文全文宽
  • document.body.srollHeight 网页正文全文高
  • document.body.srollTop 网页被卷去的高
  • document.body.scrollLeft 网页被卷去的左

🤞🤞 三、Screen对象

Screen对象 显示器的高度和宽度

  • screen.availHeight 返回显示屏幕的高度(除Windows任务栏40之外)/屏幕可见工作区高度
  • screen.availWidth 返回显示屏幕的宽度(除Windows任务栏之外)/屏幕可见工作区宽度
  • screen.height 返回显示屏的高度 分辨率
  • screen.width 返回显示器屏幕的宽度 分辨率

🤞🤞 四、event对象

事件位移对象 event

  • e.clientX、e.clientY
    鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性
  • e.pageX、e.pageY
    类似于e.clientX、e.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。
  • e.offsetX、e.offsetY
    鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。
  • e.screenX、e.screenY
    鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性
<think>好的,我现在需要帮助用户解决如何使用jQuery在H5页面中以rem为单位实现Tab点击切换内容的效果。首先,我应该回忆一下用户的需求。用户提到要使用REM作为单位,并且通过jQuery实现H5页面的Tab切换。我需要确保回答结构清晰,步骤详细,同时符合用户的要求,比如正确使用LaTeX格式,生成相关问题等。 首先,我需要考虑REM单位的应用。REM是相对于根元素(html)字体大小的单位,所以在实现布局时,需要先设置好根字体大小,通常使用响应式设计中的方法,比如通过JavaScript根据屏幕宽度动态调整。不过用户可能已经在项目中配置了REM的基础设置,比如使用lib-flexible或者手淘的解决方案,但如果没有的话,可能需要先设置html的font-size。 接下来是Tab切换的结构。通常,Tab结构包括导航按钮对应的内容区域。导航按钮一般用ul列表,每个li对应一个tab项,内容区域则是多个div,每个div对应一个tab内容。这里需要注意,用户希望点击切换,所以需要绑定click事件到导航项上。 然后是jQuery的实现部分。需要选中导航项,绑定点击事件,当点击时切换对应的内容显示。这里需要注意的是,如何根据索引来关联导航项内容项。通常可以通过索引值来匹配,比如第n个导航按钮对应第n个内容区域。另外,切换时需要添加移除active类,来控制显示隐藏。 关于REM单位的应用,在设置元素的尺寸、间距时,应该使用rem,而不是px。比如,设置每个内容块的宽度、高度,或者动画的位移,可能需要用rem单位。在jQuery中操作CSS属性时,可以直接使用rem的值,比如设置left属性为index * 10rem这样的形式,但需要注意,jQuery的.css()方法可能需要数值单位分开处理,或者直接拼接字符串,比如'2rem'。 另外,可能需要注意移动端的适配问题,比如触摸事件点击事件的冲突。用户提供的引用中提到了原生js解决触摸滑动点击同时控制tab切换,但用户这次的问题主要是点击切换,所以可能不需要处理滑动事件。不过如果用户需要同时支持滑动切换,可能需要集成swiper.js之类的库,但根据问题描述,用户目前只需要点击切换,所以可以专注于点击事件的处理。 接下来,代码结构方面,HTML部分需要包含导航内容容器。导航项使用data-*属性来关联对应的内容块,或者通过索引来匹配。CSS部分需要设置默认隐藏内容块,激活的状态显示,并且使用rem单位。jQuery部分则处理点击事件,切换active类,并可能添加过渡动画。 然后,我需要考虑可能的优化点,比如使用CSS过渡动画来提升用户体验,避免直接显示隐藏的突兀。同时,动态计算内容块的宽度或高度,如果需要根据屏幕调整的话,可能需要使用rem单位进行计算,但要注意在jQuery中如何将rem转换为实际的像素值,或者直接使用百分比布局,可能更灵活。 另外,用户提到的是H5页面,可能需要在移动端有良好的显示效果,所以响应式设计很重要。使用REM单位本身就是为了适配不同屏幕尺寸,所以需要确保整个布局都是基于REM的,包括字体大小、边距、宽度等。 可能的错误点:忘记设置根字体大小,导致REM单位计算不正确;jQuery选择器写错,导致事件没有绑定成功;在切换内容时,没有正确移除其他项的active类,导致多个内容同时显示;CSS中的display属性使用不当,比如用none隐藏内容,而active类使用block显示,但内容元素可能是其他显示类型,比如flex,这时需要统一。 总结步骤: 1. 设置REM基准单位,通常在CSS中设置html的font-size。 2. 编写HTML结构,包括Tab导航内容块。 3. 使用CSS设置样式,包括active类的显示隐藏,使用REM单位。 4. 使用jQuery绑定点击事件,切换active类,实现内容显示。 5. 添加过渡效果,优化用户体验。 6. 测试不同屏幕下的显示效果,确保REM适配正确。 现在需要将这些思考整理成步骤,给出示例代码,并确保符合用户的要求,比如正确使用LaTeX格式(虽然这个问题可能用不上数学公式,但如果有的话需要检查),生成相关问题,添加引用标识等。同时,用户提供的引用中有一些关于移动端Tab切换的解决方案,可能需要适当引用,但根据问题,用户主要使用jQueryREM,所以引用中的方法可能作为相关问题的扩展。</think>### 如何用 jQuery 在 H5 页面中以 rem 为单位实现 Tab 点击切换效果? #### 1. 设置 REM 基准单位 在 CSS 中定义根字体大小(通常 1rem = 视口宽度的 1/10),适配不同屏幕: ```css html { font-size: calc(100vw / 10); /* 示例:设计稿宽度 750px 时,1rem = 75px */ } ``` #### 2. 编写 HTML 结构 ```html <div class="tab-container"> <!-- 导航 --> <ul class="tab-nav"> <li class="active">Tab1</li> <li>Tab2</li> <li>Tab3</li> </ul> <!-- 内容 --> <div class="tab-content"> <div class="content-item active">内容1</div> <div class="content-item">内容2</div> <div class="content-item">内容3</div> </div> </div> ``` #### 3. 添加 CSS 样式(使用 REM) ```css .tab-nav { display: flex; padding: 0.2rem; } .tab-nav li { flex: 1; padding: 0.4rem; font-size: 0.32rem; border-bottom: 0.02rem solid #ccc; cursor: pointer; } .tab-nav li.active { border-bottom-color: #007bff; } .content-item { display: none; padding: 0.4rem; font-size: 0.28rem; } .content-item.active { display: block; animation: fade 0.3s; /* 可选过渡效果 */ } @keyframes fade { from { opacity: 0; } to { opacity: 1; } } ``` #### 4. jQuery 实现切换逻辑 ```javascript $(function() { $('.tab-nav li').on('click', function() { const index = $(this).index(); // 切换导航激活状态 $(this).addClass('active').siblings().removeClass('active'); // 切换内容显示(使用 rem 单位控制动画位移) $('.content-item').eq(index) .addClass('active') .siblings().removeClass('active'); }); }); ``` #### 5. 关键细节说明 1. **REM 单位适配**:所有尺寸(如字体、边距、边框)均使用 rem,确保不同屏幕比例一致[^1]。 2. **索引匹配**:通过 `index()` 获取点击位置,实现导航与内容一一对应。 3. **过渡动画**:通过 CSS 动画提升交互体验,避免内容切换生硬。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值