JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结


Posted in Javascript onJune 27, 2019

本文实例讲述了JS前端知识点offset,scroll,client,冒泡,事件对象的应用。分享给大家供大家参考,具体如下:

关于offset

多用于检测盒子高度,宽度,位置等

- offsetWidth : 盒子的宽度, 包括(width, padding, border)
- offsetHeight: 盒子的高度, 包括(height, padding, border)
- offsetLeft: 返回自身距离带有定位的上级盒子左边的位置
- offsetTop: 返回自身距离带有定位的上级盒子上边的距离
- offsetParent: 返回自身带有定位的父级对象

dom.style.left 与 dom.offsetLeft 的区别

  • offsetLeft 返回的值是数字,style.left 返回的带'px'
  • offsetLeft 只读, style.top 可读写
  • offsetLeft 本身可以无定位, style.left 本身必须有定位属性

关于scroll

  • scrollTop : 盒子或页面滚动距离顶部的距离
  • scrollLeft : 盒子或页面滚动距离左侧的距离
  • scrollTo : 盒子或页面滚动到的位置,参数(x,y)
  • onscroll : 使用onscroll 事件检测window或者dom的滚动

页面scrollTop的兼容写法

var scrolltop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

关于client

  • clientWidth: width + padding
  • clientHeight
  • scrollWidth: width + padding + (如果有溢出,包括溢出部分)
  • scrollHeight: height + padding + (如果有溢出,包括溢出部分)

检测屏幕可视区域宽度的兼容写法

function getClientWidth() {
  if(!window.innerWidth) {
    return {
      width: window.innerWidth,
      height: window.innerHeight
    }
  } else if (document.compatMode === "CSS1Compat") {
    // 标准模式下
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight
    }
  }
  // 怪异模式
  return {
    width:document.body.clientWidth,
    height:document.body.clientHeight
  }
}

检测电脑屏幕尺寸

  • window.screen.width
  • window.screen.height

事件的冒泡

冒泡顺序演示

  • IE 6.0 : div > body > html > document
  • 其他浏览器:div > body > html > document > window
  • 不存在冒泡的事件: blur, focus, load, unload

阻止冒泡

借助事件对象 evt

  • 标准浏览器:evt.stopPropagation();
  • IE: evt.cancelBubble = true;

通过事件对象获取事件源对象示例

btn.onclick = function(event) {
 var evt = window.event || event;
  var target = evt.target ? evt.target : evt.srcElement;
 console.log(target);
}

常用的 event 对象属性

  • pageX : 光标相对于该网页的水平位置 (非IE6,7,8属性)
  • pageY : 光标相对于该网页的垂直位置 (非IE6,7,8属性)
  • screenX : 光标相对于该屏幕的水平位置
  • screenY : 光标相对于该屏幕的垂直位置
  • clientX : 光标相对于该网页可见区域的水平位置
  • clientY : 光标相对于该网页可见区域的垂直位置
  • target : 该事件被传送到的对象
  • type : 事件的类型

event 对象兼容的写法示例

document.onclick = function(event) {
 var evt = event || window.event;
}

pageX 和 pageY的兼容性

pageX = evt.clientX + document.documentElement.scrollLeft;
pageY = evt.clientY + document.documentElement.scrollTop;

更多关于JavaScript相关内容可查看本站专题:《JavaScript事件相关操作与技巧大全》、《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
TextArea 控件的最大长度问题(js json)
Dec 16 Javascript
图片轮换效果实现代码(点击按钮停止执行)
Apr 12 Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
Apr 11 jQuery
前端构建工具之gulp的配置与搭建详解
Jun 12 Javascript
简化vuex的状态管理方案的方法
Jun 02 Javascript
fetch 如何实现请求数据
Dec 20 Javascript
node.js实现微信开发之获取用户授权
Mar 18 Javascript
vue-i18n结合Element-ui的配置方法
May 20 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
vue实现修改图片后实时更新
Nov 14 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 #Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
Jun 27 #Javascript
微信小程序实现form表单本地储存数据
Jun 27 #Javascript
ES6 class的应用实例分析
Jun 27 #Javascript
ES6 Promise对象的应用实例分析
Jun 27 #Javascript
使用Vue 实现滑动验证码功能
Jun 27 #Javascript
js变量值传到php过程详解 将php解析成数据
Jun 26 #Javascript
You might like
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
python动态进度条的实现代码
2019/07/03 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
后进生评语大全
2015/01/04 职场文书
实施意见格式范本
2015/06/05 职场文书
谢师宴家长致辞
2015/07/27 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
学习心得体会
2019/06/20 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis
python3 hdf5文件 遍历代码
2021/05/19 Python
解决vue中provide inject的响应式监听
2022/04/19 Vue.js