javascript中BOM介绍、屏幕尺寸、历史记录、URL解析、计算机信息获取、定时器、三大系列及兼容代码、封装动画函数、同步和异步

BOM介绍:

BOM指的是浏览器对象模型,是用来操作浏览器的,例如浏览器弹窗、地址栏、滚动条等,浏览器顶级对象:window;页面中的所有内容都是属于window的,window可以省略;confirm(‘带有取消功能的弹框’)和alert相似,但是它有返回值,点击确定是true,点击取消是false;

window.οnlοad=function(){};页面加载完后触发事件执行,onload指页面上dom和图片及CSS等加载完;onDOMContentLoad指页面中的dom加载完触发事件执行,注意仅仅指dom;都用于解决js代码放在页面中元素之前带来的报错。

window.οnunlοad=function(){};窗口关闭后触发事件执行;window.οnbefοreunlοad=function(){};窗口关闭之前触发事件执行,它们只有IE8支持。

获取屏幕路尺寸:

window.innerWidth获取屏幕的宽度;window.innerHeight获取屏幕的高度;

location地址栏对象:

location是一个对象,它有对应的方法和属性,如下:
在这里插入图片描述
在这里插入图片描述

URL组成:

以scheme://host:port/path?query#fragment为例:
在这里插入图片描述
history对象:

history是历史记录,用于操作页面历史记录进行页面的前进或者后退,其属性和方法如下:
在这里插入图片描述
HTML5新增历史记录操作方法:history.pushState(null,null,url)在URL中追加历史记录,第一个参数是存数据的,第二个参数是存标题的,第三个参数是追加URL地址的。

history.replaceState(null,null,url)替换URL中历史记录,第一个参数表示存的数据,第二个参数表示存的标题,第三个参数表示替换的URL地址。

window.onpopstate事件:当历史发生改变时触发事件函数。

通过哈希值或者历史记录改变网页不利于性能优化,通过ajax改变网页又不利于seo优化,因此在实际开发中常把两者结合起来使用,这样既可以提高性能又可以提高SEO优化,即通过ajax加载页面的同时更改地址栏URL。
navigator对象:

用于获取计算机硬件及软件信息,其相关属性和方法如下:
在这里插入图片描述

    <script>//定义一个函数判断是手机端还是pc端function isMobile(){if(window.navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)) {return true; // 移动端,这里省略函数分装可直接重定向到移动端网址,}else{return false; // PC端,也可直接重定向到pc端网址}}//    判断后的操作if(isMobile()){location.href="./mobile/index.html"//移动端的页面// 判断true跳转到这个主页}else{location.href="./pc/index.html"//电脑端的页面// 判断false跳转到这个主页}</script>  

setInterval()定时器:

setInterval()是window的一个方法,里面可以传入两个参数,第一个参数是一个函数,第二个参数是一个毫秒值,它是用来控制函数在多久执行一次的,window可以省略,如下:

	<script>setInterval(function() {console.log('hello');}, 500);</script>

clearInterval()清除定时器:

setInterval()定时器返回一个值,被称为定时器的id值,clearInterval()方法是用来清除定时器(停止定时器)的,里面传入某个定时器的id值,则这个定时器就会被停止,如:

	<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><input type="button" value="停止" id='btn'></body><script>function hello() {console.log('hello');};function stop() {clearInterval(times);};var times = setInterval(hello, 500);document.getElementById('btn').onclick = stop;</script></html>

setTimeout和clearTimeout一次性定时器:

setTimeout()定时器和setInterval()传的参数一样,其返回值也是一个id值,不同的是此定时器只执行一次回调函数,被称为一次性定时器;

clearTimeout()是用来清除一次性定时器setTimeout()的,其使用和clearInterval()方法一样,如下案例:

	<script>var times = setTimeout(function() {console.log('setTimeout是一个一次性的定时器');}, 2000);setTimeout(function() {clearTimeout(times);console.log('clearTimeout清除里一次性定时器setTimeout');}, 1000);</script>

offset-系列:

在CSS样式表中设置元素的left、top、width、height等属性值,这个值在js中是无法通过style.属性获取的,但是设置在行内的样式是可以被style.属性获取到的;为了解决这个问题,可以通过offset-系列来获取元素的left和top属性值,两种方式都可以获取到,其相关属性有:offsetLeft、offsetTop、offsetWidth、offsetHeight、offsetParent等,得到的值时包含border的;返回值没有单位,是只读属性;它们都是相对有定位的父级元素判断距离的,若父级没有定位则以body元素进行判断距离。

client-系列:

client-系列是用来获取可视区域的信息的,其属性有:clientTop返回元素上边框的大小、clientLeft返回元素左边框的大小、clientWidth返回自身内容区域宽度(不含border,含padding)、clientHeight返回自身内容区域的高度(不含border,含padding)、clientX和clientY返回距离浏览器边缘的距离,所有属性返回值都是不带单位的。

scroll-滚动系列:

用于获取元素内容的大小、滚动距离等,其属性有:scrollTop返回上侧卷去的距离、scrollLeft返回左侧卷去的距离、scrollWidth返回自身内容实际宽度(不包含border)、scrollHeight返回自身内容 实际高度(不包含border);它们都不带单位,scroll还是一个滚动事件,当滚动滚动条时触发事件函数。

pageYOffset和pageXOffset:

window.pageYOffset获取浏览器(文档页面)向上卷去的距离,window.pageXOffset获取浏览器(文档页面)向左卷去的距离。

getComputedStyle()和currentStyle:

getComputedStyle(element)返回element元素的所有CSS属性,并将这些属性以对象的方式存在一个对象中,若要的到element元素的某个属性值则可:getComputedStyle(element).属性,但是IE8不支持;为了兼容IE浏览器,可以使用.currentStyle属性,IE支持它,谷歌火狐不支持,其兼容代码如下:

	<script>function getStyleCss(element, styles) {if (element.currentStyle) {return element.currentStyle[styles];} else {return getComputedStyle(element)[styles];};};// 注意后面参数实参要传字符串形式:var divsWidth = getStyleCss(divs, 'width');console.log(divsWidth);</script>

页面滚动出去距离兼容代码:

同样,上面页面滚动距离获取的属性各自有自己的兼容问题,因此封装兼容代码如下:

	<script>function getScrollValue() {var scrollTops = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;var scrollLefts = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;// 下面对象的属性值可以直接拿上面的兼容代码,可以省略两个变量但是为了便于理解,这里使用两个变量接收:var scorllObj = {left: scrollLefts,top: scrollTops};return scorllObj;};var scrollValues = getScrollValue();console.log(scrollValues.top + '----' + scrollValues.left);</script>

鼠标距离页面距离的兼容代码:

pageX(pageY)可以获得鼠标距离页面的距离,但是它有兼容问题,因此可以结合clientX(clientY) + scrollLeft(scrollTop)来编写兼容代码:

	<script>// 调用时参数E是事件函数中的参数e(事件对象)或window.event对象:function getPageValue(E) {return {y: E.pageY ? E.pageY : E.clientY + E.scrollTop,x: E.pageX ? E.pageX : E.clientX + E.scrollLeft};};// 获取鼠标点击时触点距离页面的距离:document.onclick = function(event) {event = window.event || event;console.log(getPageValue(event).y);};</script>

将所有系列的兼容代码装入一个对象:

	<script>//把代码放在一个对象中var compatible = {//window.event和事件参数对象e的兼容getEvent: function(E) {return window.event || E;},//可视区域的横坐标的兼容代码getClientX: function(E) {return this.getEvent(E).clientX;},//可视区域的纵坐标的兼容代码getClientY: function(E) {return this.getEvent(E).clientY;},//页面向左卷曲出去的横坐标getScrollLeft: function() {return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;},//页面向上卷曲出去的纵坐标getScrollTop: function() {return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;},//相对于页面的横坐标(pageX或者是clientX+scrollLeft)getPageX: function(E) {return this.getEvent(E).pageX ? this.getEvent(E).pageX : this.getClientX(E) + this.getScrollLeft();},//相对于页面的纵坐标(pageY或者是clientY+scrollTop)getPageY: function(E) {return this.getEvent(E).pageY ? this.getEvent(E).pageY : this.getClientY(E) + this.getScrollTop();}};//使用:document.onclick = function(e) {console.log(compatible.getPageX(e));console.log(compatible.getPageY(e));};</script>

动画函数封装:

其参数element表示要设置动画的元素;target表示元素要移动到某位置的目标,传入数字;directions表示方向是沿x或y轴移动,可传入‘x’或’y’:

	<script>function animation(element, target, directions) {clearInterval(element.timeId);var direction = directions == 'x' ? 'Left' : 'Top';element.timeId = setInterval(function() {var current = element['offset' + direction];var temp = 1;temp = current < target ? temp : -temp;element.style[direction.toLowerCase()] = current + temp + 'px';if (current == target) {clearInterval(element.timeId);};temp += 1;}, 1);};animation(divs, 1000, 'x');</script>

同步和异步:

js是单线程工作原理,按照任务的的顺序依次执行,这是同步;但是js在执行某一项任务时,还可以允许执行其它任务,这个就是异步,回调函数是一个异步任务。js中执行机制:先执行主栈上的任务,再执行任务队列中的任务,如回调函数就是任务队列中的任务。

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者 删除。
笔者:苦海

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

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

相关文章

Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

转自&#xff1a;Mysql数据库优化技术之配置篇、索引篇 &#xff08; 必看 必看 &#xff09;(一)减少数据库访问对于可以静态化的页面&#xff0c;尽可能静态化对一个动态页面中可以静态的局部&#xff0c;采用静态化部分数据可以生成XML&#xff0c;或者文本文件形式保存使用…

javascript中本地储存、离线缓存、地理定位、网络状态

本地储存&#xff1a; 实际开发中某些内容是不需要放到服务器中&#xff0c;而是放到了浏览器中&#xff0c;需要的时候可以快速的访问&#xff0c;甚至页面刷新也可能不会丢失数据&#xff0c;容量较大&#xff1b;这里介绍两种数据存储方式&#xff1a;sessionStorage约5M大…

Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数)...

来源&#xff1a;http://blog.csdn.net/xiongmao000738/article/details/6863988 一、变体类型常用的函数介绍&#xff1a; Variant&#xff1a; 一种可以拥有各种数据类型&#xff1b; 也可以告诉目前存储的数据是什么类型(通过使用VarType函数)&#xff1b; 可以给相同的Var…

HTML 引用Css样式的四种方式

不才&#xff0c;只知道HTML引用CSS样式有四种方式&#xff0c;内部引用和外部引用各两种&#xff0c;因为老是忘记细节&#xff0c;记下了随时翻阅亦可方便如我般的初学者 内部引用方式1&#xff1a; 直接在标签内用 style 引用&#xff0c;如&#xff1a; <div class"…

javascript中实例对象和构造函数关系、原型语法、原型链、call实现继承、apply调用函数、bind拷贝函数、拷贝继承、class类、super、严格模式、高阶函数、闭包、递归、es6简介

实例对象和构造函数的关系及原型&#xff1a; 实例对象是通过构造函数创建出来的&#xff0c;实例对象的构造器constructor就是指向构造函数的&#xff1b;每个实例对象中的同一方法的指向是各不相同的&#xff0c;但是其属性值相同的属性可以相同&#xff0c;这样会造成内存浪…

phpstorm IDE编辑器使用手记

a.选项卡限制问题 突破打开的文件选项卡个数限制&#xff1a;默认安装后的phpstorm打开的文件个数是有限制的&#xff0c;默认是10个。也就是最多同时打开10个文件进行编辑。 超过10个就会自动关闭前面最先打开的文件。所以我们要修改设置&#xff1a;File > Setting 打开设…

移动web现状、viewport视口、二倍图、移动web开发主流方案、布局技术选型(流式布局、flex弹性布局、less+rem+媒体查询布局、混合布局、媒体查询、bootstrap)

移动端web现状&#xff1a; 移动端常见浏览器&#xff1a;UC浏览器&#xff0c;QQ浏览器&#xff0c;Opera浏览器&#xff0c;百度手机浏览器&#xff0c;360安全浏览器&#xff0c;谷歌浏览器&#xff0c;搜狗手机浏览器&#xff0c;猎豹浏览器及杂牌浏览器。移动端常见的浏览…

Centos 6.5(64bit)上安装Vertica single node

在Win8上使用虚拟机Virtualbox安装Centos6.5,想在上面安装vertica. 以下记录了我在安装的过程中遇到的问题与一些解决方案。 1.安装Centos的时候遇到了一个恼人的问题&#xff0c;即安装成功后第一次启动时会需要你配置一些用户信息&#xff0c;时区信息和Kdump信息。 我当时选…

less简介、less安装、编译、less语法之变量、嵌套、类混入、函数混入、运算、less文件导入

less基础&#xff1a; CSS是一门非程序语言&#xff0c;没有变量、函数、作用域等&#xff0c;此时使用rem单位就会出现图片等大量计算尺寸的问题&#xff0c;但是less可以轻松实现运算&#xff0c;它是CSS预处理语言&#xff0c;引入了变量、混入、函数等&#xff0c;常见的C…

Mysql数据库备份和按条件导出表数据

Mysql数据库备份和按条件导出表数据一、备份数据库# mysqldump -u root -p dbcurr>/home/20090219.sqlmysqldum为备份命令&#xff0c;-u用户&#xff0c;-p密码&#xff0c;dbcurr数据库名&#xff0c;>备份符&#xff0c;/home/20090219.sql存储数据文件的路径。www.2…

jQuery概述、优点、使用步骤、入口函数、jQuery对象和DOM对象之间的转换、层级选择器、属性选择器、筛选选择器、节点选择器

jQuery简介&#xff1a; jQuery是一个高效、精简并且功能丰富的javascript库&#xff0c;它提供的API简单易学&#xff0c;且兼容众多浏览器&#xff0c;极大地简化了javascript代码开发&#xff0c;包含内容&#xff1a;HTML 元素选取、HTML 元素操作、CSS 操作、HTML 事件函…

睡觉应该按时

最近又想奋起 &#xff0c;最天又是 12 点多睡的&#xff0c;结果呢&#xff0c;呵呵&#xff1f; 一个规律的认识&#xff0c;真是反反复复&#xff0c;希望养成一个好的习惯&#xff0c;而不是不能可持续发展的习惯转载于:https://www.cnblogs.com/51Tsinghua/p/3831444.html…

golang的指针到string,string到指针的转换

由于某个需求&#xff0c;需要如题的转换&#xff0c;废话不多说&#xff0c;直接贴代码了&#xff0c;其实挺丑了&#xff0c;备用了 func (this *Server) socketParserHandler(client *genTcpServer.Client, fullData []byte) {fmt.Println("original data is", cl…

jQuery中事件及常用事件总结、jQuery中常见效果、隐式迭代、链式编程、样式操作、动画队列、不同元素绑定同一个事件

jQuery事件&#xff1a; jQuery中的事件和javascript中的事件基本相似&#xff0c;不同的是jQuery中的事件处理函数写在事件后面的括号中&#xff0c;如&#xff1a; <script>$(input).click(function() {alert(hello word);});</script>jQuery中常见事件&#xf…

atitit.提升开发效率---mda 软件开发方式的革命

atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MDA的历史及其由来 2 5. MDA的三个主要目标是&#xff1a;轻便性、 互操作性和可重用性。 3 6. MDA跟代…

BigQuery 分区表简介和使用

大纲 什么是分区表 我们先看定义&#xff1a; 分区表是一种数据库表设计和管理技术&#xff0c;它将表中的数据划分为逻辑上的多个分区&#xff0c;每个分区包含一组特定的数据。每个分区都根据定义的分区键&#xff08;通常是一个列或字段&#xff09;的值进行分类&#xff…

jQuery操作属性、设置文本、遍历元素、元素创建添加删除、操作元素尺寸、操作元素位置、注册事件、事件处理、解绑事件、拷贝、多库共存、jQuery插件

jQuery操作属性&#xff1a; jQuery中提供三种方法操作属性&#xff0c;分别是&#xff1a;prop()、arrt()、data(),具体如下&#xff1a; prop()操作自带属性&#xff1a;用来操作元素本身自带的属性&#xff08;包括没有显示在DOM上的自带属性&#xff09;&#xff0c;如:a…

C_文件读写流

strcmp() 所在头文件&#xff1a;string.h 功能&#xff1a;比较俩个字符串 一般形式&#xff1a;strcmp(字符串1&#xff0c;字符串2) 说明&#xff1a; 当S1<S2时&#xff0c;返回为负数return result,result<0 当S1S2时&#xff0c;返回值0 当S1>S2时&#xff0c;返…

初次使用Apache、ip地址、防火墙、域名、DNS、hosts文件、端口、URL介绍、Apache配置文件、配置虚拟主机、请求响应、http协议、

Apache提供web服务&#xff1a; 启动Apache&#xff0c;让其客户端可以使用你机器上安装的Apache提供的web服务&#xff0c;访问你机器上的网站。这种情况下你的计算机就是服务器&#xff0c;别人的机器就是客户端。 注意&#xff1a;确保配置文件语法检查通过&#xff0c;确…

量子计算机算法与应用研究论文(转载务必注明出处)

量子计算机算法与应用研究 学科分类&#xff1a;计算机科学 湖北省沙市中学 谢晓啸 摘要 1.量子计算机 2.量子计算机算法 3.移动互联 4.云计算 5.经典计算机的局限 6.量子计算前景 二零一四年一月十二日 目 录 摘 要......................................................…