js进阶六:JSON,离线存储,WebSocket,画布,音频/视频

JSON

  • JavaScript Object Notation
  • JS对象表示法
  • JSON是表示数据的一种格式
  • JSON实际就是一个字符串,但是JSON这个字符串的格式比较特殊
  • JSON的语法和JS对象的语法基本一致,但是注意JSON中的属性名必须加双引号
  • JSON可以被任意的语言任意的平台所识别,并且可以转换为任意语言的对象
  • 在开发中我们经常使用JSON来进行数据的交换,或者是编写配置文件
  • JSON语法规范:
  • JSON对象
    • '{ }'
      • JSON数组
    • '[]'
  • JSON中可以使用的数据类型
    • 1.字符串
    • 2.数值
    • 3.布尔值
    • 4.null
    • 5.对象
    • 6.数组

stringify(JSON对象)

  • 需要一个JSON对象作为参数,可以将该对象转换为JSON字符串返回

      var result = JSON.stringify(arr);
    

parse(string字符串)

  • 可以将一个字符串转换为JSON对象

  • JSON这个工具类在IE7及以下的浏览器中不支持

  • 如果需要兼容这些老版本的浏览器,则可以引入一个外部的JSON文件,来处理该问题

      var result = JSON.parse(str3); 
    

离线存储

cookie

  • cookie由服务器创建,第一次响应后,记录在浏览器
  • 每次请求,cookie都会发动到服务器
  • 每次响应,cookie都会推送到浏览器
  • 在浏览器读取cookie比较繁琐
  • cookie容量小,只有4kb

sessionStorage / localStorage

生命周期

sessionStorage 数据创建到浏览器页签关闭
localStorage 数据创建到用户手动清除,或者使用clear(), removeItem(key)删除

数据共享

sessionStorage 条件:同一个浏览器页签
localStorage 条件:相同域名(协议,域名,端口)的不同网址

使用场景

频繁操作且安全性不高的数据

存储数据格式

  • 1.数字
  • 2.字符串
  • 3.如果实JSON对象,需要使用 JSON.stringify(JSON)转成string;获取后再调用JSON.parse(JSON的字符串)转成JSON对象再使用。

属性方法

setItem(key, value)

增加一条数据

getItem(key)

根据key值获取一条数据

removeItem(key)

根据指定的key删除一条数据

clear()

清除所有数据

key(num)

获取指定索引位的key值

length

数据项个数

sessionStorage.setItem("name", "老二");
sessionStorage.getItem("name");
sessionStorage.removeItem("name");
sessionStorage.clear();
var key = sessionStorage.key(2);
sessionStorage.length;

画布

宽高不要写单位,宽高不要在css中设置

 
    抱歉,你的浏览器不支持Canvas元素
  

var mycanvas = document.querySelector("#mycanvas");

 if(mycanvas.getContext){
   //获取画画笔
   var paint = mycanvas.getContext("2d");
}

API

默认从左到右,从上到下绘制,宽高为负值的时候往返方向绘制

绘制矩形

fillStyle

设置填充颜色(可设置渐变色)

合法的颜色值,rgba(255,255,255,.5)

paint.fillStyle = "red";
strokeStyle

设置描边颜色(可设置渐变色)

paint.strokeStyle = "red";
fillRect(起始点X坐标,起始点Y坐标,宽,高)

填充矩形

paint.fillRect(100, 100, 200, -200);
lineWidth

设置画笔宽度

paint.lineWidth = 10;
strokeRect(起始点X坐标,起始点Y坐标,宽,高)

描边矩形

paint.strokeRect(0, 0, 100, 100);

绘制线段

beginPath()

开始绘制新的路径,相当于抬起画笔

paint.beginPath();
moveTo(x坐标, y坐标)

把路径移动到画布中的指定点,不创建线条

paint.moveTo(50, 50);
lineTo(x坐标, y坐标)

添加一个新点,然后在画布中创建从该点到最后指定点的线条

paint.lineTo(100, 100);
lineCap

设置或返回线条末端线帽的样式

  • butt 默认。向线条的每个末端添加平直的边缘。

  • round 向线条的每个末端添加圆形线帽。

  • square 向线条的每个末端添加正方形线帽。

    paint.lineCap = "round";
    
lineJoin

设置或返回两条线相交时,所创建的拐角类型

  • bevel 创建斜角。

  • round 创建圆角。

  • miter 默认。创建尖角。

    paint.lineJoin = "round";
    
closePath()

创建从当前点回到起始点的路径,创建线条

paint.closePath();
stroke()

绘制已定义的路径

paint.stroke();
clearRect(起始x坐标, 起始y坐标, 结束x坐标, 结束y坐标)

清除指定区域内的像素

paint.clearRect(0, 0, 800, 800);
arc(圆心X左边,圆心Y坐标,半径,起始角度,结束角度)

创建弧/曲线(用于创建圆形或部分圆)

paint.arc(100, 100, 50, 0, .5 * Math.PI);
arcTo(弧的起点的 x 坐标,弧的起点的y坐标,弧的终点的 x 坐标,弧的终点的 y 坐标,弧的半径)

绘制两条切线之间的弧线

paint.arcTo(150,20,150,70,50);

绘制文字

font

设置或返回文本内容的当前字体属性

paint.font = "100px Arial";
textAlign

设置或返回文本内容的当前对齐方式,水平对齐方式

可选值:center,start ,end,left,right

paint.textAlign = "start";
textBaseline

设置或返回在绘制文本时使用的当前文本基线

可选值:alphabetic ,top ,hanging ,middle , ideographic ,bottom

paint.textBaseline = "middle";
strockText(绘制的文本, X左标, Y坐标)/fillText(绘制的文本, X左标, Y坐标)

在画布上绘制文本

paint.strokeText("hello", 100, 100);
paint.fillText("Hello World!",10,50);

设置渐变

createLinearGradient( 渐变开始点的 x 坐标 ,渐变开始点的 y 坐标 ,渐变结束点的 x 坐标 , 渐变结束点的 y 坐标)

创建线性渐变(用在画布内容上)

var canvasGradient = paint.createLinearGradient(50, 50, 250, 250);
createRadialGradient(渐变的开始圆的 x 坐标 ,渐变的开始圆的 y 坐标 , 开始圆的半径 , 渐变的结束圆的 x 坐标,渐变的结束圆的 y 坐标,结束圆的半径 );
var canvasGradient = paint.createRadialGradient(200, 200,50, 300, 300,100);
addColorStop(0.0 与 1.0 之间的值, CSS 颜色值);

创建放射状/环形的渐变(用在画布内容上)

canvasGradient.addColorStop(0, "red");
canvasGradient.addColorStop(.5, "blue");

设置阴影

shadowColor

设置或返回用于阴影的颜色

paint.shadowColor = "red";
shadowBlur

设置或返回用于阴影的模糊级别
paint.shadowBlur = 100;

shadowOffsetX/shadowOffsetY

设置阴影偏移

paint.shadowOffsetX = 100;
paint.shadowOffsetY = 100;

绘制图像/视频

drawImage( 规定要使用的图像、画布或视频dom对象,图像的 x 坐标,图像的 y 坐)

向画布上绘制图像、画布或视频

paint.drawImage(imgDom,100 0);

转换

转换有叠加效果,如果之前有转换,会在之前转换的基础上再次转换

scale(缩放绘图的宽度,缩放绘图的高度)

缩放当前绘图

paint.scale(2,2);
rotate(旋转角度)

旋转当前绘图

paint.rotate(20*Math.PI/180);
translate(X偏移距离,Y偏移距离)

重新映射画布上的 (0,0) 位置

paint.translate(70,70);

合成

globalCompositeOperation

可选值:

  • source-over 默认。在目标图像上显示源图像。

  • source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的- 部分是不可见的。

  • source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。

  • source-out 在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。

  • destination-over 在源图像上方显示目标图像。

  • destination-atop 在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。

  • destination-in 在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。

  • destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。可以用来设置刮刮卡效果

  • lighter 显示源图像 + 目标图像。

  • copy 显示源图像。忽略目标图像。

  • xor 使用异或操作对源图像与目标图像进行组合。

    paint.globalCompositeOperation = "destination-out";
    
globalAlpha

设置或返回绘图的当前 alpha 或透明值

paint.globalAlpha=0.2;
save()

保存之前paint设置的样式

paint.save()
restore()

重新回到之前保存的样式

paint.restore()

WebSocket

var webSocket = new WebSocket(“ws://echo.websocket.org/“);传一个socket服务器地址

事件

onopen

建立连接成功

onmessage

接收服务器信息,even.data包含返回的信息

onerror

发生错误

onclose

关闭通信

方法

send(“要发送的信息”)

close()

优点

  • 实现长连接
  • 减少无用信息传递,节省带宽。
  • 全双工(Full Duplex): 请求与响应可以同步进行。
  • 减少延迟:一旦建立Websocket连接,只要服务器有可用消息就会推送到客户端。 它与轮询由本质区别,只有一个连且实时“推送”信息。
  • 可以跨源(origin)请求第三方服务
  • 简单易用

音频/视频

方法

paly()开始播放

pause()暂停播放

事件

onloadedmetadata

当音频元数据加载完毕时触发。

ontimeupdate

播放过程中实时触发

onvolumechange

声音改变时触发

even.target

  • duration 音频总时长(返回未格式化的秒)
  • currentTime 音频已经播放时长(返回未格式化的秒)
  • volume: 0~1的任意值。控制音量。
  • muted: 布尔值。静音。(ture表示静音,false表示非静音)
  • paused:布尔值。音频文件是否暂停。(ture表示暂停,false表示播放)
  • ended:布尔值。音频文件播放结束(ture表示播放结束,false表示播放中或者暂停)

你可能感兴趣的:(js进阶六:JSON,离线存储,WebSocket,画布,音频/视频)