javascript与CSS复习(三)


Posted in Javascript onJune 29, 2010

我们先来看看如何获取光标相对于整个页面的位置,因为光标位置变量x,y一般通过鼠标事件获取(如mousemove或者mousedown),下面两个通用函数,用于获取光标相对于整个页面的当前位置。

//获取光标的水平位置 
function getX(e) { 
//通用化事件对象 
e = e || window.event; 
//先检查非IE浏览器的位置,在检查IE的位置 
return e.pageX || e.clientX + document.body.scrollLeft; 
} //获取光标的垂直位置 
function getY(e) { 
//通用化事件对象 
e = e || window.event; 
//先检查非IE浏览器的位置,在检查IE的位置 
return e.pageY || e.clientY + document.body.scrollTop; 
}

像在FF中e.pageX就是在整个页面中的X坐标(包括滚动条的滚动距离), 而在IE中e.clientX表示当前显示在用户面前视图中的X坐标,还要加上document.body.scrollLeft(横向滚动条的距离)才是完整的X坐标位置。
下面的一个概念是视口(viewport),可以看作是浏览器滚动条内的一切东西。视口还包含的部分组件是视口窗口、页面和滚动条等。
获得页面的尺寸:
//返回页面的高度(增加内容的时候可能会改变) 
function pageHeight() { 
return document.body.scrollHeight; 
} 
//返回页面的宽度 
function pageWidth() { 
return document.body.scrollWidht; 
}

其中的scrollHeight和scrollWidth(点击查阅),它们详细描述了元素的潜在宽度和高度,而不只是当前所看到的尺寸。
接下来我们要去获取滚动条的位置,换言之页面相对于视口的顶端距离。
//确定浏览器水平滚动位置的函数 
function scrollX() { 
//一个快捷方式,用在IE6/7的严格模式中 
var de = document.documentElement; 
//如果浏览器存在pageXOffset属性,则使用它 
return self.pageXOffset || 
//否则,尝试获取根节点的左端滚动偏移量 
(de && de.scrollLeft) || 
//最后,尝试获取body元素的左端滚动偏移量 
document.body.scrollLeft; 
} //确定浏览器垂直滚动位置的函数 
function scrollY() { 
//一个快捷方式,用在IE6/7的严格模式中 
var de = document.documentElement; 
//如果浏览器存在pageYOffset属性,则使用它 
return self.pageYOffset || 
//否则,尝试获取根节点的顶端滚动偏移量 
(de && de.scrollTop) || 
//最后,尝试获取body元素的顶端滚动偏移量 
document.body.scrollTop; 
}

下面我们来看看如何移动滚动条,我们可以用scrollTo方法,它作为window对象的一个属性而存在,它带有两个参数,即x和y偏移量,可以滚动到视口指定位置,两个例子
//如果需要滚动到浏览器的顶端,可以这么做 
window.scrollTo(0,0) //如果需要滚动到指定元素,则可以这样 
window.scrollTo(0, pageY(document.getElementById('content')));

如果对pageY函数不熟悉了,可以往回复习下,用来获得元素在整个文档中的位置,再给出一遍,让自己也巩固下
//获取元素的Y位置 
function pageY(elem) { 
//查看我们是否位于根元素 
return elem.offsetParent ? 
//如果我们能继续得到上一个元素,增加当前的偏移量并继续往上递归 
elem.offsetTop + pageY(elem.offsetParent): 
//否则,获取当前的偏移量 
elem.offsetTop; 
}

我们下面来学习如何获得视口(viewport)的尺寸,获取视口的尺寸就可以深入了解用户当前可以看到的内容有多少。
//获取视口的高度 
function windowHeight() { 
//一个快捷方式,用在IE6/7的严格模式中 
var de = document.documentElement; 
//如果浏览器存在innerHeight属性,则使用它 
return self.innerHeight || 
//否则,尝试获取根节点高度 
(de && de.clientHeight) || 
//最后,尝试获取body元素的高度 
document.body.clientHeight; 
} //获取视口的宽度 
function windowWidth() { 
//一个快捷方式,用在IE6/7的严格模式中 
var de = document.documentElement; 
//如果浏览器存在innerWidth属性,则使用它 
return self.innerWidth || 
//否则,尝试获取根节点宽度 
(de && de.clientWidth) || 
//最后,尝试获取body元素的宽度 
document.body.clientWidth; 
}

可能你会对innerHeight,clientHeight等属性有些疑惑,那就直接点击它,Mozilla Developer center里解释的很清楚。

最后来讲一个比较有意思的效果,现在web前端中也很流行——"拖拽",作者没有给出具体的实现,而是引用了一个不错的js库,dom-drag.js,可以学习下高手的源码,同时介绍了好几个流行的js库,jquery也在其中。好了javascript与css的复习到这了,有什么问题欢迎留言讨论。

Javascript 相关文章推荐
javascript 去字符串空格终极版(支持utf8)
Nov 14 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
Apr 14 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
Dec 08 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
Aug 28 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
Apr 24 Javascript
React中获取数据的3种方法及优缺点
Feb 18 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
javascript与CSS复习(二)
Jun 29 #Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 #Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
Jun 29 #Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
Jun 29 #Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 #Javascript
javascript hasFocus使用实例
Jun 29 #Javascript
jquery photoFrame 图片边框美化显示插件
Jun 28 #Javascript
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
php xml 入门学习资料
2011/01/01 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python 实现删除文件或文件夹实例详解
2016/12/04 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python request post上传文件常见要点
2020/11/20 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
医学生职业规划范文
2014/01/05 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
内勤主管岗位职责
2014/04/03 职场文书
简易版租房协议书范本
2014/10/13 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
村官个人总结范文
2015/03/03 职场文书
党支部意见范文
2015/06/02 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis