xujj277 / blog Goto Github PK
View Code? Open in Web Editor NEW我的博客
我的博客
.append()
.prepend()
.before()
.after()
.remove()
.empty()
.html()
.text()
$node.text()
和$node.html()
有什么区别?$node.text()
只是会将里面的内容都显示出来。
$node.html()
若里面有标签则会将其先经行解析之后再显示出来。但有可能会引入xss攻击,若有人页面放入一个script,容易形成漏洞。而text就不会这种问题,可创建一个节点,若是恶数据,只会展示而不会运行。
$('.container1').html('<h1>我是标题</h1>')
$('.container2').text('<h1>我不是是标题</h1>')
.val()
.attr()
.removeAttr()
.prop()
.css()
.addClass()
.removeClass()
.hasClass()
.toggleClass()
是两种不同的对象类型,并且两者的方法不能混用。
jQuery是类数组对象,并不是数组
$()
的后面加入[index]中括号加数字,来获得其中的相应的原生DOM对象,如$('#p1')[0]
$()
来获得相应的jQuery对象,如$(document.querySelector('#p1'))
.each()
$.extend()
.clone()
.index()
.ready()
$(document).ready(function(){
//放在开头时,所要执行的代码会等到元素加载完之后才执行。
})
window.onload
事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了。$(document).ready()
时DOM结构绘制完毕后就执行,不必等到加载完毕。document.onDOMContentLoaded
等html文档被完全加载和解析时触发,而不等待样式表和图像等的加载。window.onload
不能同时编写多个,如果有多个则只能执行一个。$(document).ready()
可以执行多个#1. 如何异步加载脚本?
用defer或者async
defer是有顺序的,等文档读取和解析完成之后,再开始解析脚本。
async是不保证顺序的,读取和解析文档的过程会和解析脚本的过程同时进行。
#2. ES3、ES5、ES6分别指什么?
国际标准化组织ECMA(European Computer Manufacturers Association)规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript。ES3 就是1999年12月发布的ECMAScript 3.0版,成为JavaScript的通行标准,得到了广泛支持。
2007年10月,ECMAScript 4.0版草案发布,对3.0版做了大幅升级。草案发布后,由于4.0版的目标过于激进,各方对于是否通过这个标准,发生了严重分歧。以Yahoo、Microsoft、Google为首的大公司,反对JavaScript的大幅升级,主张小幅改动;以JavaScript创造者Brendan Eich为首的Mozilla公司,则坚持当前的草案。
2008年7月,由于对于下一个版本应该包括哪些功能,各方分歧太大,争论过于激进,ECMA开会决定,中止ECMAScript 4.0的开发(即废除了这个版本),将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,而将其他激进的设想扩大范围,放入以后的版本,由于会议的气氛,该版本的项目代号起名为Harmony(和谐)。会后不久,ECMAScript 3.1就改名为ECMAScript 5就是 ES5。
Harmony项目则一分为二,一些较为可行的设想定名为JavaScript.next继续开发,后来演变成ECMAScript 6也就是ES6
#3. 解释浏览器的渲染机制
首先先解析HTML中的内容创建一个DOM树,再解析CSS的样式成一个树的形状。
把上述两个树结合起来就得到一个对象,不单有元素还有他的具体位置和关系。这就是渲染树。
然后开始布局计算出每个节点的位置,将每个节点绘制到页面上。
#4. repaint 和 reflow 分别指什么
reflow当某一处的位置发生变化时,其他地方的位置都需要重新的计算位置并布局。需要浏览器根据各种样式来计算并根据计算结果将元素放到它该出现的位置。
reflow一般都会有repaint,当某元素的尺寸和位置发生变化时,会带动着使其他元素都需要重新绘制repaint。
但当只需要改变某个元素颜色等就只需要单独重绘。
浏览器将各自元素的特性都绘制一遍就是repaint
#5. 解释白屏和 FOUC。
对于图片和CSS, 在加载时会并发加载(如一个域名下同时加载两个文件)。 但在加载 JavaScript 时,会禁用并发,并且阻止其他内容的下载. 所以把 JavaScript 放入页面顶部也会导致 白屏 现象.
#一、如下代码输出多少?如果想输出3,那如何改造代码?
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i
};
}
console.log( fnArr[3]() )
10
//方法一
var fnArr = []
for(var i = 0; i < 10; i++){
fnArr[i] = (function(j){
return function(){
return j
}
})(i)
}
console.log( fnArr[3]() )
//方法二
var fnArr = []
for(var i = 0; i < 10; i++){
(function(i){
fnArr[i] = function(){
return i
}
})(i)
}
console.log( fnArr[3]() )
//方法三
var fnArr = [];
for (let i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i
};
}
console.log( fnArr[3]() )
#二、封装一个 Car 对象。
var Car = (function(){
var speed = 0;
function setSpeed(s){
speed = s
}
function get(){
return speed
}
function speedUp(){
return speed++
}
function speedDown(){
return speed--
}
return {
setSpeed: setSpeed,
get: get,
speedUp: speedUp,
speedDown: speedDown
}
})()
Car.setSpeed(30)
console.log(Car.get()) //30
Car.speedUp()
console.log(Car.get()) //31
Car.speedDown()
console.log(Car.get()) //30
#三、如下代码输出多少?如何连续输出 0,1,2,3,4?
for(var i=0; i<5; i++){
setTimeout(function(){
console.log('delayer:' + i )
}, 0)
}
//方法一
for(var i=0; i<5; i++){
(function(j){
setTimeout(function(){
console.log('delayer:' + j )
}, 0)
})(i)
}
//方法二
for(var i=0; i<5; i++){
setTimeout((function(j){
return function(){
console.log('delayer:' + j )
}
})(i),0)
}
#四、如下代码输出多少?
function makeCounter() {
var count = 0
return function() {
return count++
};
}
var counter = makeCounter()
var counter2 = makeCounter();
console.log( counter() ) // 0
console.log( counter() ) // 1
console.log( counter2() ) // ?
console.log( counter2() ) // ?
0
1
0
1
有两个不同的作用域,对象是不一样的
#五、补全代码,实现数组按姓名、年纪、任意字段排序。
var users = [
{ name: "John", age: 20, company: "Baidu" },
{ name: "Pete", age: 18, company: "Alibaba" },
{ name: "Ann", age: 19, company: "Tecent" }
]
users.sort(byField('age'))
users.sort(byField('company'))
var users = [
{ name: "John", age: 20, company: "Baidu" },
{ name: "Pete", age: 18, company: "Alibaba" },
{ name: "Ann", age: 19, company: "Tecent" }
]
function byField(field){
return function(a, b){
return a[field] > b[field]
}
}
users.sort(byField('company'))
users.sort(byField('age'))
#六、写一个 sum 函数,实现如下调用方式。
console.log( sum(1)(2) ) // 3
console.log( sum(5)(-1) ) // 4
function sum(a){
return fuction(b){
return a + b
}
}
(DNS 劫持:指的是给了一个假IP但域名却是一样的。)
服务器指的是安装系统的机器。web服务器接受用户的请求,并交给网站代码。
HTML字符串被浏览器接受后被一句句读取解析:
#一、jquery 如何绑定事件?直接绑定和使用事件代理分别如何使用
#二、jQuery 如下函数如何使用?演示使用方式
demo
#三、介绍一些函数的用法,给出范例
$.ajax
$.get
$.getJSON
###$.ajax
$.ajax ({
url: 'http://xxx',//请求的一个接口
type: 'GET',
data: {
username: 'xujinjun',
password: 'xu123456'
},
dataType: 'json'//请求从服务器加载JSON编码的数据
}).done(function(){
//数据请求成功后执行的操作
}).fail(function(){
//数据请求失败后执行的操作
}).always(function(){
//无论成功与否所执行的操作
})
这样就发送了一个GET请求
还有一个更简单的发送GET请求的方式就是$.get
###$.get
$.get('http://api.jirengu.com/weather.php').done(function(ret){
console.log(ret)
})
###$.getJSON
$.getJSON('http://api.jirengu.com/weather.php',function(ret){
console.log(ret)
})
let
声明的变量只在它所在的代码块中有效。
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined
如果把let
换成var
,则会出现下面情况:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
因为i
是由var
所声明的,全局里面只有一个i
,所以每次i发生改变就内部的console.log(i)
也会发生改变
如果改用let的,则不会出现上面情况
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
i
是由let
声明的所以只会在本轮循环中有效。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
ES6 明确规定,如果区块中存在let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
总之,在代码块内,使用let
命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
let
不允许在相同作用域内,重复声明同一个变量。
// 报错
function func() {
let a = 10;
var a = 1;
}
// 报错
function func() {
let a = 10;
let a = 1;
}
因此,不能在函数内部重新声明参数。
function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.
上面代码表明改变常量的值会报错。
const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
#总结
let:
{}
之间let a
之前使用a
,就会报错let a
,那么报错const:
1.2.3 同上
4.只有一次赋值的机会,并且必须在声明的时候立马赋值
name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。
表单中的单选框radio,name相同的是一组,比如以下代码:
<form>
<input type="radio" name="sex" value="male"> 男 <br>
<input type="radio" name="sex" value="female"> 女<br>
<input type="radio" name="age" value="adult"> 已成年<br>
<input type="radio" name="age" value="child"> 未成年
</form>
#5. CSRF 攻击是什么?如何防范?
一、跨站请求伪造。攻击者盗用了你的身份,以你的名义发送恶意请求。CRSF能做的事情包括利用你的身份发邮件,发短信,进行交易转账,甚至盗取账号信息。
二、
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。
后端接收前端传来的数据,需要确认前端的身份,是本公司的网页传来的数据,而不是其他黑客知道后端地址后传来的假数据。那么就加一个隐藏域,验证value里的值和数据库里name的值是不是对应的。
有时候一个表单里有多个提交按钮,后端怎么知道用户是点击哪个按钮提交过来的呢?这时候我们只要加隐藏域,对每一个按钮起个名字(value值),后端接收到数据后,检查value值,就能知道是哪个按钮提交的了。
有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。
标签为 input 元素定义标注(标记)。
label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。
Label标识有两个属性,一个是for,一个是 accesskey。
for属性:
功能:表示这个Lable是为哪个控件服务的,Label标签要绑定了FOR指定HTML元素的ID或name属性,你点击这个标签的时候,所绑定的元素将获取焦点。
用法:姓名
accesskey属性:
功能:定义了访问这个控件的热键。
用法:<label for="InputBox" accesskey="N">姓名
局限性:accessKey属性所设置的快捷键不能与浏览器的快捷键冲突,否则将优先激活浏览器的快捷键。
<input type="submit" value="提交">
具有提交表单的功能
var fs = require('fs')
require
的方式来引入组件和自己写的文件
var strApi = require('./stringApi')
stringApi.js中要用到exports
方式才可以被引入
function replaceDigit(str) {
return str.replace(/\d/gm, '')
}
module.exports.replaceDigit = replaceDigit
fs.readFile('file.txt', 'utf8', function (err, str) {
if(err) {
console.log('error...');
}else {
var strAfter = strApi.replaceDigit(str)
console.log(strAfter)
fs.writeFile('fileAfter.txt', strAfter, function (err) {
if(err) throw err;
console.log('asdfjag')
})
}
})
比如readFile writeFile
等
i. BFC 即 Box Formatting Context,每个渲染区域用formatting context表示,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
块级格式化上下文,创建了BFC的元素就是一个独立的盒子,盒子里布局不受外部影响,也不影响外部元素的布局。
ii. 1.根元素
2.float的属性不为none
3.position为absolute或fixed
3.display为inline-block,flex或者inline-flex
4.overflow不为visible
iii. 1.解决外边距合并问题。http://js.jirengu.com/maseneyava/1/edit
2.清理浮动。http://js.jirengu.com/cofevimoce/1/edit?html,css,output
一,1,相邻元素合并。2.父子合并。3.自己合并。
二, 当两个外边距都是正数时,取两者之中的较大者;当两个外边距都是负数时,取两者之间绝对值较大者;当两个外边距一正一负时,取的是两者的和。
三,1.设置浮动元素float,但添加了浮动的特性,位置发生变化。
2.最好是不要管合并的问题,都统一用magin-top等。
由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。
这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。
实际项目中CSS Hack大部分是针对IE浏览器不同版本之间的表现差异而引入的。
渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验
优雅降级 (graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
条件注释:(conditional comment) 是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。
IE Hack:主要是针对ie浏览器不同版本的特性,编写适应兼容不同ie浏览器的代码方案
js 能力检测:测检测浏览器是否支持某种特定的能力,然后给出特定的解决方案。
html5shiv.js:用于解决ie低版本浏览器对HTML5新增标签不识别导致CSS不起作用的脚本。
respond.js:模拟css3的媒体查询,主要是解决ie低版本浏览器不支持媒体查询,解决低版本浏览器的响应式问题
css reset:CSS Reset用来清除所有浏览器默认样式,这样更易于保持各浏览器渲染的一致性。
normalize.css:对normalize.css进行引用,可以让不同浏览器在渲染的时候样式更加统一,为浏览器的渲染方式提供了高度一致性。
Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被用于Twitter Bootstrap、HTML5 Boilerplate、GOV.UK、Rdio、CSS Tricks 以及许许多多其他框架、工具和网站上。
Modernizr:Modernizr是一个检测用户浏览器HTML5和CSS3能力的JavaScript库。Modernizr在页面加载时快速运行来检测功能,然后创建一个保存检测结果的JavaScript对象,接着页面中的html标签上添加一系列class属性来接通你的CSS。
postCSS:一个使用 JS 插件来转换 CSS 的工具。这些插件可以支持使用变量,混入(mixin),转换未来的 CSS 语法,内联图片等操作。PostCSS使CSS变成JavaScript的数据,使它变成可操作。PostCSS是基于JavaScript插件,然后执行代码操作。PostCSS自身并不会改变CSS,它只是一种插件,为执行任何的转变铺平道路。
传统的JavaScript的输出模板是
$('#result').append(
'There are <b>' + basket.count + '</b> ' +
'items in your basket, ' +
'<em>' + basket.onSale +
'</em> are on sale!'
);
ES6引入了模板字符串来解决这个问题
$('#result').append(`
There are <b>${basket.count}</b> items
in your basket, <em>${basket.onSale}</em>
are on sale!
`);
用反引号(`)来标识
// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串,会保留所有的空格和缩进
`In JavaScript this is
not legal.`
console.log(`string text line 1
string text line 2`);
// 字符串中嵌入变量,需要将变量名写在${}之中
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
//模板字符串之中还能调用函数。
function fn() {
return "Hello World";
}
`foo ${fn()} bar`
// foo Hello World bar
数据的结构
大分类
n*(n-1)*(n-2)...
a = {
'0': 4,
'1': 6,
'2': 3,
'3': 2,
'4': 1,
'length': 5
}
轮数 = 1
index
while (轮数 < a['length']) {
index = 0
while (index <= a['length'] - 1 - 轮数) {
if (a[index] < a[index+1]) {
// 什么也不做
}else{
// 交换左右的位置
t = a[index]
a[index] = a[index+1]
a[index+1] = t
}
index += 1
}
}
//////
轮数 index的下标最大值(从0开始)
1 3
2 2
3 1
4 0
n*(n-1)*(n-2)...
v-model 其实只是一个语法糖,因为
<input v-model="searchText">
等价于
<input
v-bind:__A__="searchText"
v-on:__B____="searchText = _____C______"
请问 A B C 三个空应该分别填入什么(请按照 A B C 的顺序作答,否则可能被判为不通过)
**答案:**value input $event.target.value
v-model 用到自定义组件上时,跟 input 稍有不同
<custom-input v-model="searchText"></custom-input>
等价于
<custom-input
v-bind:value="searchText"
v-on:input="searchText = ____?_____"
></custom-input>
答案:$event
ajax并不是一项新技术,它是2005年由jesse james garrett创造的一个术语,它描述了一种“新”方法,将多种现有技术结合在一起使用,包括html或xhtml,级联样式表,JavaScript,文档对象模型,xml,xslt,最重要的是xmlhttprequest对象。
当这些技术结合在ajax模型中时,Web应用程序能够快速,增量更新用户界面,而无需重新加载整个浏览器页面。
这使应用程序更快,更响应用户操作。
尽管ajax中的x代表xml,但json现在使用的不止是xml,因为它具有许多优点,如轻量级和JavaScript的一部分。
json和xml都用于在ajax模型中打包信息。
而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应。 实现在页面不刷新的情况下和服务端进行数据交互。
ajax是一组使用客户端上的许多Web技术创建异步Web应用程序的Web开发技术。
通过ajax,Web应用程序可以异步(在后台)发送和检索服务器中的数据,而不会干扰现有页面的显示和行为。
通过将数据交换层与表示层分离,ajax允许网页和扩展Web应用程序动态更改内容,而无需重新加载整个页面。
在实践中,由于json本身是javascript的优势,所以现代实现通常使用json而不是xml。html和css可以结合使用来标记和样式信息。
然后可以通过javascript修改网页以动态显示 - 并允许用户与新信息交互。
JavaScript内置的xmlhttprequest对象通常用于在网页上执行ajax,从而允许网站在不刷新页面的情况下将内容加载到屏幕上。
ajax也不是一项新技术或另一种不同的语言,只是以新方式使用现有技术。
使用 server-mock node工具启动一个能处理静态文件和动态路由的服务器
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest()
xhr.open('GET','/mock/cate.json',true)
xhr.send()
xhr.onload = function(){
console.log(JSON.parse(xhr.responseText))
}
</script>
</body>
</html>
在json文件里面写入json格式的内容就可以mock到该数据了
例如用Easy mock的网站来mock数据,可以在网站上得到一个URL
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest()
xhr.open('Get','/login?username=jirengu&password=123',true)
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
console.log(xhr.responseText)
}
}
//GET的使用
//status 是服务器是否正常
//readystate是交互流程是否结束
//load是readystate是4了
xhr.addEventListener('readystatechange',function(){
console.log('readystate:',xhr.readystate)
})
xhr.addEventListener('load',function()}{
console.log(xhr.status)
if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){
var data = xhr.responseText
console.log(data)
}else{
console.log('error')
}
})
xhr.onerror = function(){
console.log('error')
}
//POST 过程
var xhr = new XMLHttpRequest()
xhr.open('POST','/login',true)
xhr.send('username=jirengu&password=123')
xhr.addEventListener('load',function()}{
console.log(xhr.status)
if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){
var data = xhr.responseText
console.log(data)
}else{
console.log('error')
}
})
xhr.onerror = function(){
console.log('error')
}
</script>
</body>
</html>
function ajax(options){
//补全
}
ajax({
url: 'http://api.jirengu.com/weather.php',
data: {
city: '北京'
},
onsuccess: function(ret){
console.log(ret)
},
onerror: function(){
console.log('服务器异常')
}
})
//封装一个ajax
function ajax(opts){
var url = opts.url
var type = opts.type || 'GET'
var dataType = opts.dataType || 'json'
var onsuccess = opts.onsuccess || function(){}
var onerror = opts.onerror || function(){}
var data = opts.data || {}
var dataStr = []
for(var key in data){
dataStr.push(key + '=' + data[key])
}
dataStr = dataStr.join('&')
if(type === 'GET'){
url += '?' + dataStr
}
var xhr = new XMLHttpRequest()
xhr.open(type,url,true)
xhr.onload = function(){
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
//成功了
if(dataType === 'json'){
onsuccess(JSON.parse(xhr.responseText))
}else{
onsuccess(xhr.responseText)
}
} else{
xhr.send()
}
}
#1. 实现一个两栏布局,右侧固定宽度200px,左侧自适应宽度,附上预览链接。
浮动布局
使用 flex 布局
#2. 实现一个三栏布局,两侧固定宽度200px,中间宽度自适应撑满,附上链接。
浮动布局
flex 布局
#3. css reset 是什么?css 预编译器是什么? 后编译器(post css)是什么?
CSS Reset就是之前的样式我不要,a{color: red;},抛弃默认样式
CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性,无需考虑浏览器的兼容性问题
PostCSS 本身是一个功能比较单一的工具。它提供了一种方式用 JavaScript 代码来处理 CSS。它负责把 CSS 代码解析成抽象语法树结构(Abstract Syntax Tree,AST),再交由插件来进行处理。插件基于 CSS 代码的 AST 所能进行的操作是多种多样的,比如可以支持变量和混入(mixin),增加浏览器相关的声明前缀,或是把使用将来的 CSS 规范的样式规则转译(transpile)成当前的 CSS 规范支持的格式。PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 AST,第二个就是调用插件来处理 AST 并得到结果。
1. npm install
npm install -g http-server
-g就是全局的意思 后面就是相应的包
npm init
会产生package.json
npm install --save axios
npm install --save-dev webpack
会把文件放到package.json(相关的信息和所需要安装的依赖都会放到这里,相当于种子的功能,告诉你需要下载什么)中
2. npm uninstall
卸载
- npm install -g xxx --registry=https: //registry.npm.taobao.org
nrm一个快速切换源版本的工具
- npm install -g nrm
nrm ls
nrm use taobao
nrm use npm
n stable 查看最新版本
sudo n stable
下载一个最新的版本
yarn
{
"scripts": {
"css:autoprefixer": "postcss -u autoprefixer -r dist/css/*",
"css:compress": "csso in.css --output out.css",
"js:lint": "eslint src/js",
"js:uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js",
"image:imagemin": "app=imagemin-cli npm run check; imagemin src/images dist/images -p",
"server": "browser-sync start --server --files 'dist/css/*.css, dist/js/*.js'",
"watch": "onchange 'src/js/*.js' -- npm run css:compress",
"start": "npm run server"
}
}
npm run css:autoprefixer
npm start
<vue-highcharts :options="options" :Highcharts="Highcharts" ref="xxxcharts"></vue-highcharts>
获得统计图
this.$refs.xxxcharts.getChart()
添加数据到统计图可以用addSeries的方式
chart.addSeries()
若有多图的情况
export let xxxdata = {
name: 'xxx',
data: [],
}
如果数据有变动还可以通过
xxxcharts.series[0].update({
name: 'xxx',
data: [],
})
update的方法是会把之前写的数据全部覆盖,相当于重新写
另外还有一种方法,是setdate但是只支持更新数据,不能更改相应的options
若公司没有提供一个时间库的话,就只能自己来计算后端给的数据是多少份,然后在24个小时内平分。
x轴的格式有一定的要求。
xAxis: {
type: 'datetime',
// tickAmount: 24,
// tickInterval: 3600 * 1000,
// minTickInterval: 3600 * 1000,
dateTimeLabelFormats: {
day: '%H:%M'
}
const startTime = new Date(new Date() - 24 * 3600 * 1000)
const pointStart = Date.UTC(startTime.getFullYear(),
startTime.getMonth(), startTime.getDate(), startTime.getHours(), startTime.getMinutes())
let pointInterval = 24 * 3600 * 1000 / this.chartData[0].data.length
lineChart.addSeries(Object.assign({}, item, {pointInterval}, {pointStart}))
网上有的相关的官方的noData的提示,也引入相关的noData需要的东西,依旧没有显示那个“没有数据”的提示
只好最后,自己加了div来提示“没有数据”,只要自己v-if看是否有数据.length
可以分这四种:Trident,Gecko,Webkit,Chromium/Bink,Presto。看着都很陌生,那么换个样子:IE,Mozilla FireFox,Safari,Chrome、Opera
它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令,浏览器才能获知文档类型。
<!DOCTYPE html>
主要是html源代码内中文字内容与html编码不同造成
html网页编码是gbk,而程序从数据库中调出呈现是utf-8编码的内容也会造成编码乱码
在head里设置好格式
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="description" content="">
<meta name="keywords" content="">
<meta http-equiv="Refresh" content="2;URL">
<meta http-equiv="content-Type" content="text/html; charset=utf-8">
<meta charset="utf-8">
<meta http-equiv="Expires" Content=0>
<div></div>
alt属性
是为了给那些不能看到你文档中图像的浏览者提供文字说明。这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户。替换文字是用来替代图像而不是提供额外说明文字的。alt属性包括替换说明,对于图像和图像热点是必须的。它只能用在img、area和input元素中
title属性
为设置该属性的元素提供建议性的信息。使用title属性提供非本质的额外信息。大部分的可视化浏览器在鼠标悬浮在特定元素上时显示title文字为提示信息,然而这又由制造商来决定如何渲染title文字。
title属性有一个很好的用途,即为链接添加描述性文字,特别是当连接本身并不是十分清楚的表达了链接的目的。这样就使得访问者知道那些链接将会带他们到什么地方,他们就不会加载一个可能完全不感兴趣的页面。另外一个潜在的应用就是为图像提供额外的说明信息,比如日期或者其他非本质的信息。
title属性可以用在除了base,basefont,head,html,meta,param,script和title之外的所有标签。但是并不是必须的。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.