面试问题总结

HTML5兼容性问题

为了使HTML5兼容IE8及更早的IE版本浏览器,加入一段注释,读取html5shiv来解决兼容性问题。

<!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

 

HTML5新特性

绘画 canvas;

用于媒介回放的 video 和 audio 元素;

本地离线存储,localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除;

语义化更好的内容元素,比如 article、footer、header、nav、section;

表单控件,calendar、date、time、email、url、search;

新的技术,Web Worker, Web Socket

 

Canvas

moveTo(x,y):起点,(x, y)为指定点

lineTo(x,y):从上一个指定点画到另一个点,指定点变成这个点

closePath():从上一个指定点画回到起点

stroke():真正画的动作(必须有它)

fillStyle:填充颜色

fillRect(x, y, width, height):矩形填充方式,x y为填充的矩形的左上角坐标,后两个参数为填充的矩形的大小

 

HTML5拖放

1. 首先为了使元素可拖动,把draggable属性设置为true

<img id="drag1" src="img_logo.gif" draggable="true">

2. 然后规定当元素被拖动时发生的动作:ondragstart事件

ev.dataTransfer.setData()方法设置被拖动元素的数据类型和值(这里把它的id存到Text中)

var item = document.getElementById("drag1");
item.ondragstart = function(ev)
{
  ev.dataTransfer.setData("Text",ev.target.id);
}

3. 接收的元素设置允许放置:ondragover事件

receiver.ondragover = function(ev)
{
  ev.preventDefault();
}

4. 进行放置:ondrop事件

receiver.ondrop = function(ev)
{
  ev.preventDefault();
  var data=ev.dataTransfer.getData("Text");
  ev.target.appendChild(document.getElementById(data));
}

调用ev.preventDefault来避免浏览器对数据的默认处理(ondrop事件默认是以链接形式打开)

通过ev.dataTransfer.getData(“Text”)重新拿回之前设置的值,即前边item的id

将被拖元素追加到接收元素中(receiver)

 

模块化

(function(){
    var Widget = function(){....};

    // AMD && CMD
    if(typeof define === 'function'){
        define(function(){
            return Widget;
        });
    // CommonJS
    }else if(typeof module !== "undefined" && module !== null){
        module.exports = Widget;
    // window
    }else{
        window.Widget = Widget;
    }
})();

作者:Treri
链接:https://www.zhihu.com/question/23321329/answer/24199265
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

CommonJs

CommonJs 是服务器端模块的规范,Node.js采用了这个规范。 

CommonJS中的require是同步的。模块系统需要同步读取模块文件内容,并编译执行以得到模块接口。但在浏览器端,加载 JavaScript 最佳、最容易的方式是在 document 中插入<script> 标签。但脚本标签天生异步,传统 CommonJS 模块在浏览器环境中无法正常加载。

像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。

参考

AMD

异步模块定义规范(Asynchronous Module Definition)制定了定义模块的规则,这样模块和模块的依赖可以被异步加载。这和浏览器的异步加载模块的环境刚好适应(浏览器同步加载模块会导致性能、可用性、调试和跨域访问等问题)。

AMD推崇依赖前置,换句话说,在解析和执行当前模块之前,模块作者必须指明当前模块所依赖的模块。

define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
  a.doSomething()
  // ...
  b.doSomething()
  // ...
});

代表:requireJS

参考:AMD规范

CMD

CMD(Common Module Definition)可以说是AMD的一种变体。它和AMD的主要区别是CMD推崇依赖就近(按需加载),可以把依赖写进你的代码中的任意一行。

define(function(require, exports, module) {
  var a = require('./a')
  a.doSomething()
  var b = require('./b')
  b.doSomething()
})

代码在运行时,首先是不知道依赖的,需要遍历所有的require关键字,找出后面的依赖。具体做法是将function toString后,用正则匹配出require关键字后面的依赖。显然,这是一种牺牲性能来换取更多开发便利的方法。

参考:CMD规范 AMD和CMD的区别

 

CSS3

圆角:boader-radius

盒阴影:box-shadow

边界图片:boarder-image

背景图像大小:background-size

背景图像定位:background-image

线性渐变:linear-gradient 默认从上到下,0deg指从下到上,rgba(255,0,0,0)的最后一个0代表透明度,另外可以在颜色后面加上百分数代表渐变结点位置。

径向渐变:radial-gradient

变换:transform

  1. transform: translate(50px, 100px) :右移50px,下移100px
  2. transform: rotate(30deg):顺时针旋转30度
  3. transform: scale(2, 4):宽变为2倍,高变为4倍

过渡:transition: property, duration, timing, delay   属性,持续时间(不可省),快进慢出之类(可省),延迟(可省)

动画:

  1. @keyframes:定义动画的名字、from和to
  2. animation:哪个动画(上面定义的名字),持续时间

盒模型:

  1. box-sizing: border-box:使宽高包括内边距和边框
  2. box-sizing: content-box:默认值

 

圣杯布局和双飞翼布局

 

原生Ajax

1. 创建XHR对象

var xmlhttp;
if (window.XMLHttpRequest) {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
} else {
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

2. 向服务器发送请求

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

open的第三个参数:true——异步,false——同步

3. 服务器响应

  1. onreadystatechange 事件:当 readyState 属性改变时,就会触发该事件
  2. xmlhttp.readyState:XMLHttpRequest 的状态,从0到4发生变化(4代表全部数据接收完成)
  3. xmlhttp.status:响应的HTTP状态(200表示成功)
  4. xmlhttp.responseText:响应返回的文本
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  }
}

4. 取消请求:xmlhttp.abort()

 

跨域

性能优化

 

posted @ 2016-03-16 14:52  寄生蠕虫  阅读(229)  评论(0编辑  收藏  举报