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 简练的几个函数
Aug 29 Javascript
jquery中的$(document).ready()与window.onload的区别
Nov 18 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
javascript模拟评分控件实现方法
May 13 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
Dec 25 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
深入浅析Vue全局组件与局部组件的区别
Jun 15 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
小程序实现上下移动切换位置
Sep 23 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 验证码制作(网树注释思想)
2009/07/20 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php远程下载类分享
2016/04/13 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
js 可拖动列表实现代码
2011/12/13 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
JavaScript编写简单的计算器
2015/11/25 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
Python实现SVN的目录周期性备份实例
2015/07/17 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
幼儿园保育员责任书
2014/07/22 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
基石观后感
2015/06/12 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
2019各种承诺书范文
2019/06/24 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
React中的Context应用场景分析
2021/06/11 Javascript
如何用python清洗文件中的数据
2021/06/18 Python