Javascript快速入门(下篇)

Javascript, cheer up。

Ajax:其通过在Web页面与服务器之间建立一个额外的处理层,这个处理层就被称为Ajax引擎,它解释来自用户的请求,在后台以异步的方式处理服务器通信,其结构如下图所示。

XMLHttpRequest对象:这个是Ajax的核心对象,其让Javascript构建的HTTP请求并提交给服务器,这样页面就能以异步方式在后台产生请求,让用户可以继续使用这个页面,而不必等待浏览器刷新或加载新的页面。接下来通过一个表格对XMLHttpRequest对象有个总体的了解。


属性与方法


描述


onreadystatechange


当对象的readyState属性改变时,调用相应的时间处理器


readyState


0:未初始化

1:正在加载

2:加载完成

3:交互

4:完成


responseText/rsponseXML


从服务器返回的字符串/文档对象形式数据


status/statusText


服务器返回的HTTP状态代码,解释短语


setRequestHeader(x, y)


设置请求头


abort()


停止当前请求


getAllResponseHeaders()

getResponseHeader(x)


以字符串形式返回全部响应头信息

返回指定响应头信息


open(method, URL, a)


指定HTTP方法GET/POST,目标URL和处理请求方法(默认a=true,表示异步)


send(content)


发送请求,对于POST数据是可选的

最后通过一个简单的Ajax示例库来对其有个详细的了解。

 1 function getXMLHttpRequest() {
 2 try {
 3 try {
 4 return new ActiveXObject("Microsoft.XMLHTTP"); //IE
 5 } catch (e) {
 6 return new ActiveXObject("Msxml2.XMLHTTP");
 7 }
 8 } catch (e) {
 9 return new XMLHttpRequest(); //Other
10 }
11 }
12
13 function doAjax(url, query, callback, reqtype, getxml) {
14 var myreq = getXMLHttpRequest();
15 myreq.onreadystatechange = function() {
16 if (myreq.readyState == 4) {
17 if (myreq.status == 200) {
18 var item = myreq.responseText;
19 if (getxml == 1) item = myreq.responseXML;
20 eval(callback + ‘(item)‘); //注意这人的callback的使用方式
21 }
22 }
23 }
24
25 if (reqtype.toUpperCase() == "POST") {
26 requestPost(url, query, myreq);
27 } else {
28 requestGET(url, query, myreq);
29 }
30 }
31
32 function requestGET(url, query, req) {
33 var myRandom = parseInt(Math.random() * 99999999);
34 if (query = ‘‘) {
35 var callUrl = url + ‘?rand=‘ + myRandom;
36 } else {
37 var callUrl = url + ‘?‘ + query + ‘&rand=‘ + myRandom;
38 }
39 req.open(‘GET‘, callUrl, true);
40 }
41
42 function requestPost(url, query, req) {
43 req.open("POST", url, true);
44 req.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘);
45 req.send(query);
46 }

Tip:

由于浏览器会缓存get请求的返回的数据,因此可以在请求参数中添加一个随机数来避免从缓存中读取页面,可以参考上例中的get请求。

此外,使用Ajax时还需要注意:"返回"按钮,书签和链接,注意添加用户反馈(mask),让Ajax平稳退化,应对搜索引擎嗅探,突出活跃页面元素,对用户输入的转义等。

Javacript库非常的多,例如最老的Prototype,常见的JQuery以及其移动版本Zepto,复杂一点的Angularjs,一次编写多处使用的ReactJs等,这部分将选择最常见的JQuery做一个简单的介绍。JQuery是最常见的Javascript库,其扩展性非常强,其语法中最具特色的当属$(document).ready(function() {});其省略形式为:$(function() {});

JQuery的常用选择器如下表所示。


选择器使用示例


描述


.$("span")


全部的span元素


$("#elem")


Id为elem的元素


$(".classname")


类为classname的元素


$("div#elem")


Id为elem的<div>元素


$("ul li a.menu")


类为menu且嵌套在列表项中的锚点


$("p > span")


P的直接字元素span


$("input[type=password]")


具有指定类型的输入元素


$("p:first")


页面上的第一个段落


$("p:even")


全部偶数段落


JQuery自定义选择器


$(":header"),$("p:button"),$("p:radio"),$("p:checkbox")

$("p:checked")

JQuery的常用函数如下表所示。


函数


描述


.html()


获取元素的HTML内容(包括文本),类似js中的innerHTML


.text()


获取元素的文本内容


.attr(x)


获取特定属性的值


.show(200, function(){})

.hide, .toggle


显示或隐藏元素,第一个参数为显示延迟的毫秒数

Toggle可以方便切换显示和隐藏状态


.fadeOut(),.fadeIn()

.fadeTo(300, 0.5)


淡出/淡入操作,fadeTo可以指定最终的不透明度


.slidedown(),.slideUp()

.slideToggle()


元素向下或向上滑动


动画


.animate({width:‘400px‘, height:‘500px‘}, 1500)


命令链


$(‘x‘).fadeout().fadeIn();


处理事件


原来: $().click(function(event) {});

现在: $().on(‘click‘, function(event) {});

此外,该方法还支持blur,focus,keypress,change

,mousemove,resize,scroll,submit,select等事件


Ajax


$(‘div:first‘).load("content.html #info");

#info表示选取该html中指定容器中的内容

$.get(url,{par1:‘val1‘, par2:‘val2‘},function () {});

Post方法与get方法格式基本相同

.ajax()参数很多,可以参考文档


表单元素序列化


var formdata=$(‘#form01‘).serialize();

Javascript与多媒体:多媒体内容通常保存在媒体文件中,由于这类文件都非常的,通常通过不同的编码方式压缩文件大小,比如对于音频最常见的就是MP3,对于视频来说,最常见的就是MPEG,Flash,mp4等格式。在页面中加载和播放多媒体内容的方式有如下几种。


方式


描述


锚点标签(不推荐)


<a href="sound.mp3">Play Sound</a>


<embed>


<embed src=‘music.mp3‘ autostart=‘true‘ loop=‘false‘>


<object>


<object type="audio/x-wav" data="music.wav" width="200" height="75">

<param name="src" value="music.wav">

<param name="autostart" value="true">

</object>


Flash(ShockWave)


Play(),StopPlay(),IsPlaying(),播放,停止播放,是否正在播放

GotoFrame(x),跳过第x帧

TotalFrames(x),统计影片总帧数

Rewind(),跳过第一帧,并且停止播放

Zoom(pecent),缩放视窗,与习惯思维有点差异,50表示两倍,0表示原尺寸,200表示2分之1

PercentLoaded(),获取影片下载的百分比


<video>(推荐)


<video id=‘vd01‘ width="400" height="300" controls="controls">

<source src="movie.mp4" type="video/mp4">

<source src="movie.ogg" type="video/ogg">

</video>

属性:loop循环播放,autoplay自动播放,controls显示回放控件,ended/paused判断状态,poster设置影片加载时显示的图像,volume音量

Tip:

可以使用canPlayType(type)来判断浏览器是否支持该格式,比如video/webm

常见方法: .play(), .pause()


<audio>


<audio src=‘music.mp3‘ autostart loop/>

常见格式:audio/ogg,xxx.mp3(audio/mpeg)

常见属性;.duration, .currentTime(跳到xx秒), .playbackRate, .muted

通过一个示例来了解flash的调用

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6 <meta name="viewport" content="width=device-width, initial-scale=1">
 7 <title>flash示例</title>
 8 <link href="../public/css/bootstrap.css" rel="stylesheet">
 9 <link href="../public/css/bootstrap-theme.css" rel="stylesheet">
10 <script type="text/javascript" src="../public/js/jquery-2.1.4.js"></script>
11 <script type="text/javascript">
12 function flashLoaded(theMovie) {
13 if (typeof(theMovie) != ‘undefined‘) {
14 return theMovie.PercentLoaded() == 100;
15 } else {
16 return false;
17 }
18 }
19
20 function play() {
21 if (flashLoaded(demo) && !demo.IsPlaying()) {
22 demo.Play();
23 }
24 }
25
26 function stop() {
27 if (flashLoaded(demo) && demo.IsPlaying()) {
28 demo.StopPlay();
29 }
30 }
31
32 function rewind() {
33 stop();
34 if (demo.Rewind()) {
35 demo.Rewind();
36 }
37 }
38
39 $(function() {
40 document.getElementById(‘play‘).onclick = play;
41 document.getElementById(‘stop‘).onclick = stop;
42 document.getElementById(‘rewind‘).onclick = rewind;
43 var demo = document.getElementById(‘demo‘);
44 });
45 </script>
46 </head>
47 <body>
48 <article>
49 <!-- <embed id=‘demo‘ src=‘example.swf‘ width="318" height="300" play=‘false‘ loop=‘false‘ pluginspage=‘http://www.macromedia.com/go/getflashplayer‘ swliveconnect=‘true‘></embed> -->
50 <embed id=‘demo‘ src=‘flash4611.swf‘ width="800" height="600" play=‘false‘ loop=‘false‘></embed>
51 <form id=‘form‘>
52 <button id="play" type="button" class="btn btn-success" data-dismiss="modal">Start</button>
53 <button id="stop" type="button" class="btn btn-warning" data-dismiss="modal">Stop</button>
54 <button id="rewind" type="button" class="btn btn-danger" data-dismiss="modal">Rewind</button>
55 </form>
56 </article>
57 <script type="text/javascript" src="../public/js/bootstrap.js"></script>
58 </body>
59 </html>

在HTML5中,新增了很多的HTML元素,其中有一部分比较常用,在此进行一个简单介绍。


方式


描述


<canvas>


提供页面上一个矩形区域,用于绘制图形

常见函数: canvas.getContext(‘2d)获取2d画布

fillRect(x,y,width,height)绘制填充矩形,strokeRect()绘制矩形框,

clearRect()清除矩形,moveTO(x,y)移动到指定位置,lineTo(x,y)绘制直线,

arc(x,y,r,startAngle,endAngle,anti)绘制弧线

object.beginPath(); object.clothPath()封闭形状,object.stroke()绘制轮廓

object.fill()填充形状


拖放


<div draggable=‘true‘>

对dragstart,drag,dragenter,dragleave,dragover,drop,dragend等事件进行监控,此外,相应的数据会包含在evnet.dataTransfer属性中,可以通过.setData(), .getData()对其进行操作

ev.preventDefault();

ev.dataTransfer.serData(‘Text‘,en.target.id);


本地存储


是cookie的替代者,包括localStorage和sessionStorage

localStorage.setItem(key,value);localStorage.getItem(key),数组形式也行


操作本地文件


File:提供名称、大小、MIME类型、文件句柄等信息

FileList:类似数据的文件对象列表

FileReader:使用File异步读取文件,可以查看读取进程、捕获错误、判断文件加载状态

Canvas示例如下所示(旋转的小球)。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6 <meta name="viewport" content="width=device-width, initial-scale=1">
 7 <title>canvas示例</title>
 8 <link href="../public/css/bootstrap.css" rel="stylesheet">
 9 <link href="../public/css/bootstrap-theme.css" rel="stylesheet">
10 <script type="text/javascript" src="../public/js/jquery-2.1.4.js"></script>
11 <script type="text/javascript">
12 var context;
13 var x = 50;
14 var y = 50;
15 var counter = 0;
16
17 function paint() {
18 context.beginPath();
19 context.fillStyle = ‘#ff0000‘;
20 context.arc(x, y, 15, 0, Math.PI * 2, false);
21 context.closePath();
22 context.fill();
23 }
24
25 function animate() {
26 context.clearRect(0, 0, 400, 300);
27 counter++;
28 x += 20 * Math.sin(counter);
29 y += 20 * Math.cos(counter);
30 paint();
31 }
32
33 $(function() {
34 context = canvas1.getContext(‘2d‘);
35 setInterval(animate, 100);
36 });
37 </script>
38 </head>
39 <body>
40 <article>
41 <canvas id=‘canvas1‘ width=‘400‘ height="300">
42 <p>你的浏览器不支持canvas</p>
43 </canvas>
44 </article>
45 <script type="text/javascript" src="../public/js/bootstrap.js"></script>
46 </body>
47 </html>

拖放操作结合文件API的示例如下所示

 1 <!DOCTYPE html>
 2
 3 <html>
 4 <head>
 5 <meta charset="utf-8">
 6 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 7 <meta name="viewport" content="width=device-width, initial-scale=1">
 8 <title>HTML5 文件API</title>
 9 <link href="../public/css/bootstrap.css" rel="stylesheet">
10 <link href="../public/css/bootstrap-theme.css" rel="stylesheet">
11 <style type="text/css">
12 body {
13 background-color: #ddd;
14 font-family: arial, verdana, sans-serif
15 }
16
17  #drop1 {
18 width: 400px;
19 height: 20px;
20 border: 1px solid black;
21 background-color: white;
22 padding: 10px;
23 }
24 </style>
25 <script type="text/javascript" src="../public/js/jquery-2.1.4.js"></script>
26 <script type="text/javascript">
27 function allowDrop(ev) {
28 ev.preventDefault();
29 }
30
31 function drop(ev) {
32 var files = ev.dataTransfer.files;
33 for (var i = 0; i < files.length; i++) {
34 var f = files[i];
35 var pnode = document.createElement("p");
36 var tnode = document.createTextNode(f.name + ‘ (‘ + f.type + ‘) ‘ + f.size + ‘ bytes‘);
37 pnode.appendChild(tnode);
38 ev.target.appendChild(pnode);
39 }
40 ev.preventDefault();
41 }
42
43 $(function() {
44 var drophere = $(‘#drop01‘)[0];
45 drophere.ondragover = allowDrop;
46 drophere.ondrop = drop;
47 });
48 </script>
49 </head>
50 <body>
51 <div id=‘drop01‘></div>
52 <output id=‘text‘></output>
53 <script type="text/javascript" src="../public/js/bootstrap.js"></script>
54 </body>
55
56
57
58 </html>

最后介绍一个比较有意思的,在chrome中添加自己的扩展,新建一个文件夹,在其中放入一个html页面和一个icon,然后编辑如下manifest.json文件。就可以在chrome的Tools -> Extensions ->Load unpacked extension来加载自己的扩展程序了。

1 {
2 ‘name‘: ‘MyExtension‘,
3 ‘version‘: ‘1.0‘,
4 ‘description‘: ‘xionger is handsome‘,
5 ‘browser_action‘: {
6 ‘default_icon‘: ‘icon.png‘,
7 ‘popup‘: ‘demo.html‘
8 }
9 }

参考资料:

  1. Phil, Ballard. JavaScript入门经典(第五版)[M]. 北京:人民邮电出版社, 2013.
时间: 2024-11-11 13:15:29

Javascript快速入门(下篇)的相关文章

Javascript快速入门(上篇)

Javascript的熟练之路,小弟来了. JavaScript简介:JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能.与1995年,由Netscape公司的Brendan Eich设计实现,其相关标准为ECMAScript,当前的版本为ECMAScript 2016. 其组成

JavaScript快速入门(六)——DOM

概念扫盲 DOM DOM是 Document Object Model(文档对象模型)的缩写,是W3C(万维网联盟)的标准. DOM 定义了访问 HTML 和 XML 文档的标准: “W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容.结构和样式.” W3C DOM 标准被分为 3 个不同的部分: 核心 DOM - 针对任何结构化文档的标准模型 XML DOM - 针对 XML 文档的标准模型 HTML DOM - 针对 HTML 文档的标准模

javascript快速入门之BOM模型—浏览器对象模型(Browser Object Model)

什么是BOM? BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C(WHATWG,WebHypertextApplicationTechnologyWorkingGroup--网页超文本应用程

JavaScript快速入门(五)——表达式运算

赋值运算 赋值运算的形式为左值 = 右值.如果同个表达式中有多个赋值运算,则从右到左运算.例如: a = b = c; // 和下面两行等价 b = c; a = b; 另外一种赋值运算的形式叫做复合赋值运算符,形式为左值 op= 右值,其中op=表示部分运算符和=的结合,a op= b和 a = a op b等价.例如下面两句是等价的: a += b; a = a + b; 其中op可以是下列运算符之一: +,-,*,/,%,<<,>>,>>>,&,|,

3、JavaScript快速入门(2)

函数基础 函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 注意:函数的形参是不用声明使用的. 函数的基本语法是这样的: function functionName(arg0, arg1, ... argN) { statements } 例如: function sayHi(sName, sMessage) { alert("Hello " + sName + sMessage); } 调用函数:

JavaScript快速入门-ECMAScript语句

JavaScript语句(if.for.for in.do...while.while.break.continue.switch) 一.if语句 if (condition) statement1 else statement2 1.if ....else..... if (2>1){ alter("2大于1") } else { alert("2小于1") } 2.if....else if ...else... <script> var a=

JavaScript快速入门-ECMAScript本地对象(Array)

Array对象 Array对象和python里面的list对象一样,是用来存储多个对象值的对象,且方法和属性基本上类似. 一.属性 lenght 二.方法  1.concat()  用于连接两个或多个数组.类似python中的extend方法. arrayObject.concat(arrayX,arrayX,......,arrayX) 2.join()用于把数组中的所有元素放入一个字符串.类似python中的join.'*'.join(a) JavaScript中的join用法: 3.pop

JavaScript快速入门-实战(例子)

1.模拟bootstrap中的模态框 效果图:(点我后,弹出对话框,最下面的内容可以看到,但是有一定的透明度.) 思路分析: 整体分为三层,最底层(点我),中间透明层(实现透明效果),最顶层(最新内容展示) 很明显,三个div就可以实现,正常情况上面2层div隐藏起来,通过点击“点我”后,上面2层div浮现出来,这样就实现了动画效果. 代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Conten

2014年辛星解读Javascript之DOM快速入门

在Javascript的知识中,有一个所谓的DOM,即文档对象模型,我们可以通过它来访问HTML文档的元素,当网页被加载的时候,浏览器会去创建DOM,有了这个DOM,我们可以使用Javascript去改变页面中HTML元素和属性,改变CSS样式,能够对页面中的事件作出响应. 首先就是查找一个HTML元素,我们可以通过三种方式来做到,即通过id.标签名和类名,通过id是使用getElementById方法,它是doucument的一个方法,通过标签名则可以使用getElementsByTagNam