JavaScript 经典实例日常收集整理(常用经典)

作者:阿讯小飞

原文来自:脚本之家

跨浏览器添加事件

 

//跨浏览器添加事件
function addEvent(obj,type,fn){
if(obj.addEventListener){
obj.addEventListener(type,fn,false);
}else if(obj.attachEvent){//IE
obj.attchEvent('on'+type,fn);
}
}

 

跨浏览器移除事件

 

//跨浏览器移除事件
function removeEvent(obj,type,fn){
if(obj.removeEventListener){
obj.removeEventListener(type,fn,false);
}else if(obj.detachEvent){//兼容IE
obj.detachEvent('on'+type,fn);
}
}

 

跨浏览器阻止默认行为

 

//跨浏览器阻止默认行为
function preDef(ev){
var e = ev || window.event;
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue =false;
}
}

跨浏览器获取目标对象

 

//跨浏览器获取目标对象
function getTarget(ev){
if(ev.target){//w3c
return ev.target;
}else if(window.event.srcElement){//IE
return window.event.srcElement;
}
}

 

跨浏览器获取滚动条位置

 

//跨浏览器获取滚动条位置,sp == scroll position
function getSP(){
return{
top: document.documentElement.scrollTop || document.body.scrollTop,
left : document.documentElement.scrollLeft || document.body.scrollLeft;
}
}

 

跨浏览器获取可视窗口大小

 

//跨浏览器获取可视窗口大小
function getWindow () {
if(typeof window.innerWidth !='undefined') {
return{
width : window.innerWidth,
height : window.innerHeight
}
} else{
return {
width : document.documentElement.clientWidth,
height : document.documentElement.clientHeight
}
}
},

 

js 对象冒充

 

<script type = 'text/javascript'>
function Person(name , age){
this.name = name ;
this.age = age ;
this.say = function (){
return "name : "+ this.name + " age: "+this.age ;
} ;
}
var o = new Object() ;//可以简化为Object()
Person.call(o , "zhangsan" , 20) ;
console.log(o.say() );//name : zhangsan age: 20 
</script>

js 异步加载和同步加载

 

异步加载也叫非阻塞模式加载,浏览器在下载js的同时,同时还会执行后续的页面处理。

在script标签内,用js创建一个script元素并插入到document中,这种就是异步加载js文件了:

(function() { 
var s = document.createElement('script'); 
s.type = 'text/javascript'; 
s.async = true; 
s.src = 'http://yourdomain.com/script.js'; 
var x = document.getElementsByTagName('script')[0]; 
x.parentNode.insertBefore(s, x); 
})();

同步加载

平常默认用的都是同步加载。如:

<script src="http://yourdomain.com/script.js"></script>

  同步模式又称阻塞模式,会阻止流览器的后续处理。停止了后续的文件的解析,执行,如图像的渲染。浏览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作,重定向,输出document等默认行为,所以同步才是最安全的。

  通常会把要加载的js放到body结束标签之前,使得js可在页面最后加载,尽量减少阻塞页面的渲染。这样可以先让页面显示出来。

  同步加载流程是瀑布模型,异步加载流程是并发模型。

js获取屏幕坐标

 

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="auther" content="fq" />
<title>获取鼠标坐标</title>
</head>
<body>
<script type="text/javascript">
function mousePosition(ev){
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
function mouseMove(ev){
ev = ev || window.event;
var mousePos = mousePosition(ev);
document.getElementById('xxx').value = mousePos.x;
document.getElementById('yyy').value = mousePos.y;
}
document.onmousemove = mouseMove;
</script>
X:<input id="xxx" type="text" /> Y:<input id="yyy" type="text" />
</body>
</html>

注释:

1.documentElement 属性可返回文档的根节点。
2.scrollTop() 为滚动条向下移动的距离
3.document.documentElement.scrollTop 指的是滚动条的垂直坐标
4.document.documentElement.clientHeight 指的是浏览器可见区域高度

--------------------------------------------------------------------------------

DTD已声明的情况下:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

如果在页面中添加这行标记的话

IE

document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度

Firefox

document.documentElement.scrollHeight ==> 浏览器所有内容高度
document.body.scrollHeight ==> 浏览器所有内容高度
document.documentElement.scrollTop ==> 浏览器滚动部分高度
document.body.scrollTop ==>始终为0
document.documentElement.clientHeight ==>浏览器可视部分高度
document.body.clientHeight ==> 浏览器所有内容高度

Chrome

document.documentElement.scrollHeight ==> 浏览器所有内容高度
document.body.scrollHeight ==> 浏览器所有内容高度
document.documentElement.scrollTop==> 始终为0
document.body.scrollTop==>浏览器滚动部分高度
document.documentElement.clientHeight ==> 浏览器可视部分高度
document.body.clientHeight ==> 浏览器所有内容高度

浏览器所有内容高度即浏览器整个框架的高度,包括滚动条卷去部分+可视部分+底部隐藏部分的高度总和

浏览器滚动部分高度即滚动条卷去部分高度即可视顶端距离整个对象顶端的高度。

综上

1、document.documentElement.scrollTop和document.body.scrollTop始终有一个为0,所以可以用这两个的和来求scrollTop

2、scrollHeight、clientHeight 在DTD已声明的情况下用documentElement,未声明的情况下用body

clientHeight

在IE和FF下,该属性没什么差别,都是指浏览器的可视区域,即除去浏览器的那些工具栏状态栏剩下的页面展示空间的高度。

PageX和clientX

PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化

clientX:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化.

可是悲剧的是,PageX只有FF特有,IE则没有这个,所以在IE下使用这个:

PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同)

scrollTop代表的是被浏览器滑动条滚过的长度

offsetX:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder`,可能出现负值

只有clientX和screenX 皆大欢喜是W3C标准.其他的,都纠结了.

最给力的是,chrome和safari一条龙通杀!完全支持所有属性

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/qingruozhu/p/6473110.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍转载于:https://www.cnblogs.com/jing1617/p/6473339.html

equals与hashcode的区别与联系

1.""与equals的区别与联系 &#xff08;1&#xff09;“”对于基本数据类型&#xff0c;只要值相等&#xff0c;就返回true&#xff0c;否则返回false。 若比较的为对象&#xff0c;则判断的是两个对象是否处于同一个内存地址。 &#xff08;2&#xff09;equals为O…

BZOJ1922 SDOI2010 大陆争霸 最短路

题意&#xff1a;给定一个图&#xff0c;图中有保护关系(u,v)表示到v之前必须先到一次u&#xff0c;求从1到N的最短路 题解&#xff1a; 定义d1[i]为直接到达i的最短距离&#xff0c;这个的更新和普通的Dijkstra一样 定义d2[i]为解除i的所有保护的最短距离&#xff08;不一定要…

HashSet和LinkedHashSet使用

Set接口 HashSet接口 散列是一种常见的数据存储模式&#xff0c;HashSet是基于散列存放的集合。本博客主要讲解HashSet子类的继承特点以及存储特点。 HashSet是Set接口较为常见的一个子类&#xff0c;该子类的最大特点是不允许保存重复元素&#xff0c;并且所有的内容都采用散列…

bzoj4278[ONTAK2015]Tasowanie bzoj1692[USACO 2007Dec]队列变换(Best Cow Line) 贪心正确性证明...

做法网上到处都有就不说了. 这题其实是之前做的….不过由于人太傻现在才想明白比较字典序进行贪心的正确性…. 方便起见,在两个串的最右端都加上很大但不相同的字符,避免第lcp1个字符不存在的边界。 如果两个串当前最左端的字符不相同显然选较小的. 否则,设两个剩下的串的lcp长…

MySQL约束和修改数据表知识集结

一、约束   划分标准&#xff1a;功能、数据列的数目 功能&#xff1a; &#xff08;1&#xff09;NOT NULL&#xff08;非空约束&#xff09; &#xff08;2&#xff09;PRIMARY KEY&#xff08;主键约束&#xff09; &#xff08;3&#xff09;UNIQUE&#xff08;唯一约束&…

C++注意事项

1. 空字符为NULL,大写转载于:https://www.cnblogs.com/--CYH--/p/6481691.html

论文信息系统项目管理的进度管理

论信息系统项目管理的进度管理 摘要&#xff1a; 2018 年 12 月&#xff0c;我负责了广东省某电力企业“基于 VR 的电力作业仿真培训系统”的项目建设&#xff0c;担任项目经理一职。电力作业技能培训是电力人员上岗前确保安全和保证质量的关键一环&#xff0c;由于传统的电力…

jQuery kxbdMarquee 无缝滚动

转&#xff1a;http://code.ciaoca.com/jquery/kxbdmarquee/ <marquee> 曾是 IE 下独有的一个走马灯效果的标签&#xff0c;其他浏览器并不兼容&#xff0c;于是出现了使用 JavaScript 来模拟该效果的插件。 版本&#xff1a;jQuery v1.3.2下载 jQuery kxbdMarquee查看 D…

论文信息系统项目的进度管理

试题二 论信息系统项目的进度管理 项目进度管理是保证项目的所有工作都在指定的时间内完成的重要管理过程。管理项目进度是每个项目经理在项目管理过程中耗时耗力最多的一项工作&#xff0c;项目进度与项目成本、项目质量密不可分。 请以“信息系统项目的进度管理”为题&…

sql server自动备份

2017-03-01 15:37:44 输入以下代码 1 sp_configure show advanced options, 1; 2 GO 3 RECONFIGURE; 4 GO 5 sp_configure Agent XPs, 1; 6 GO 7 RECONFIGURE 8 GO 转载于:https://www.cnblogs.com/LeslieC/p/6484581.html

IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决

IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决 之前也经常碰到这样的错误&#xff0c;通过reimport、清缓存等方法都可以解决。但这次试了好多次都还是这样&#xff0c;查看maven后发现我pom文件里也没写错。 最后是通过修改这个设置&#xf…

题目1179:阶乘-------------阶乘不用long long int 就不能AC

AC的代码: #include<iostream> using namespace std; long long int fact(int m); int main() {int n;while(cin>>n){long long int sum10,sum20;if (n0) break;int m,p;if (n%20)//n为偶数 {pn;mn-1;}else //n为奇数 {mn;pn-1; // if (p0) break;}int i,j;for …

硬件知识:打印机十个共性故障解决方法

目录 一、 打印机输出空白纸 二、打印纸输出变黑 三、打印字符不全或字符不清晰 3.1 对于针式打印机 3.2 喷墨打印机 四、打印字迹偏淡 4.1 针式打印机 4.2 喷墨打印机&#xff0c; 五、打印时字迹一边清晰而另一边不清晰 六、打印纸上重复出现污迹 6.1 针式打印机 …

HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法

http://acm.hdu.edu.cn/showproblem.php?pid2243 这是一题AC自动机 矩阵快速幂的题目&#xff0c; 首先知道总答案应该是26^1 26^2 26^3 .... 26^L&#xff0c;用等比数列的前n项和是无法做的&#xff0c;因为出现小数。 这个可以直接看到F[n] 26 * F[n - 1] 26&#xf…

为什么需要StringBuffer

(1)为什么需要StringBuffer 由于String的内容是不可变的&#xff0c;在频繁操作字符串的应用中&#xff0c;导致String对象泛滥&#xff0c;不断的被创建和销毁&#xff0c;占用大量的内存和CPU时间。 例如&#xff0c;将十万个"A"连成一个大的字符串。代码如下: 这…

linux下杀毒工具clamav

ClamAV 杀毒是Linux平台最受欢迎的杀毒软件&#xff0c;ClamAV属于免费开源产品&#xff0c;支持多种平台&#xff0c;如&#xff1a;Linux/Unix、MAC OS X、Windows、OpenVMS。ClamAV是基于病毒扫描的命令行工具&#xff0c;但同时也有支持图形界面的ClamTK工具。ClamAV主要用…

深拷贝浅拷贝

深拷贝浅拷贝 数据类型分为两种基础类型和引用类型&#xff1a; 基础类型&#xff1a;int,double等这种为基本类型 引用类型&#xff1a;Object和Array 浅拷贝只是复制了对象的引用地址&#xff0c;两个对象指向同一个内存地址&#xff0c;修改其中任意的值&#xff0c;另一…