Set
基本用法
Set 是ES6 新的数据结构,类似于数组,但每一项都是唯一的没有重复项。
我之前有篇文章写了利用deviceorientation事件获取手机姿态。既然可以获取手机在三位空间内的与坐标轴角度,也就可以通过这来控制网页中css长方体的姿态。至于在两个网页/客户端传输数据,当然是用websocket最好了。这里刚好我之前做过两个小demo关于这个。
这个 Demo 分为客户端,控制端和服务端。客户端是一个用css3
写的三维的长方体,只接受websocket
数据。
传统ajax
or XMLHttpRequest()
往往非常复杂的,而且并不好记忆。例如手写一个ajax
:
1 | var xhr = new XMLHttpRequest(); |
状态
promise 对象代表一个异步操作,有三种状态:
特点
一旦状态改变就不会在改变。
解决回调写法的混乱以及一个统一标准。
以下文字至“用法”前来源于 原文连接
假设有一个数据库保存操作,一次请求需要在三个表中保存三次数据。那么我们的代码就跟上面的代码相似了。这时候假设在第二个db.save出了问题怎么办?基于这个考虑,我们又需要在每一层回调中使用类似try…catch这样的逻辑。这个就是万恶的来源,也是node刚开始广为诟病的一点。
1 | db.save(data, function(data){ |
另外一个缺点就是,假设我们的三次保存之间并没有前后依赖关系,我们仍然需要等待前面的函数执行完毕, 才能执行下一步,而无法三个保存并行,之后返回一个三个保存过后需要的结果。(或者说实现起来需要技巧)
监听对象属性变化有两种方法:回调函数、使用访问器属性。
首先定义一个对象
1 | var obj = { |
使用回调函数思路是定义一个函数来设置对象的属性,之后在调用回调函数
1 | function $watch(obj, prop, callback) { |
1 | $watch(obj,'a',function(obj){ |
1 | obj.$property('a','random') |
使用访问器属性即使用set
get
属性,可以通过 Object
的 defineProperty
方法访问到。此方法有兼容性问题 ,这里我只监听属性更改,没有修改。
1 | Object.defineProperty(obj,"a",{ |
1 | obj.a='random'; |
如果使用原生alert、confirm 等,若用户设置禁止弹窗会影响网页功能,所以使用模拟alert等更为合适。
新建个构造函数,在其上加上属性方法来实现 alert、confirm、prompt功能。
css 部分不多陈述,主要就是把这几个弹出框设置成 position:fixed
就行了,其余样式自己解决。
这里我对三个弹出框用了三个容器包裹,大部分样式相同。页面基础样式为了方便使用了 flex
布局,详细flex布局可以参照我之前的文章。 flex布局语法简介
1 | <div class="alert layout"> |
现在开发了新版本 多房间聊天室
html5 新api,用于实现持久化连接,且不收跨域影响。通过HTTP 的Updrade头来升级协议。
1 | //创建实例 |
服务端这篇文章我使用了 ws
这个库。
1 | npm install ws --save |
新窗口打开服务端随时可能关闭,仅供测试。 已关闭
这里我使用了 vw
vh
来做屏幕适配,之后我的博客会有专门文章来写这个
media query 即是媒介查询,可以根据浏览器的不同特性来应用不同的css样式。
例如:
1 | <link href="css/reset.css" rel="stylesheet" type="text/css" media="screen" /> |
或者
1 | <style type="text/css" media="screen"> |
以下我只讨论使用 screen 特性
例如
1 | <link rel="stylesheet" href="style.css" media="screen and (min-width:640px) and (max-width:1080px)"> |
或者
Update your browser to view this website correctly. Update my browser now