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 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
Jun 14 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
JS提交form表单实例分析
Dec 10 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 Javascript
javascript实现图片轮播代码
Jul 09 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
php阳历转农历优化版
2016/08/08 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
Web开发之JavaScript
2012/03/29 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
python如何让类支持比较运算
2018/03/20 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
Python实现的knn算法示例
2018/06/14 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
应用化学专业职业生涯规划书
2013/12/31 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
功夫熊猫观后感
2015/06/10 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL