phoebecodespace / blog Goto Github PK
View Code? Open in Web Editor NEW记录与总结
记录与总结
记录处理兼容问题中遇到的css问题,它可能只是1px的偏差。
//处理办法:border改为内置阴影
border-bottom: 1px solid #E8E8E8;
=>
box-shadow:inset 0px -1px 0 #E8E8E8;
overflow-scrolling: touch;
-webkit-overflow-scrolling: touch;
优化transform在过渡效果中出现文字模糊和抖动问题
① 将元素的宽、高度设置为偶数
② 改成transform: translate(-50%, -52%)
(如果52%不行则从51%每个百分比尝试)
css改变输入框光标颜色
input,textarea{
caret-color: red;
}
input,textarea {
color: rgb(60, 0, 248); /* 光标的颜色*/
color\0: #333; /* IE hack*/
-webkit-text-fill-color: #333; /* 文本颜色 */
}
① 目标元素相对定位
② 伪元素绝对定位
③ 伪元素1px宽
④ 伪元素宽高设置为2倍
⑤ 伪元素缩小0.5倍
⑥ 把border包进来(否则边框不会一起缩放)
.thinner-border {
position: relative;
}
.thinner-border:before {
content: '';
position: absolute;
width: 200%;
height: 200%;
border: 1px solid #000;
transform-origin: 0 0;
transform: scale(0.5, 0.5);
box-sizing: border-box;
}
├─build
│ ├─build.js
│ ├─check-versions.js
│ ├─dev-client.js
│ ├─dev-server.js
│ ├─utils.js
│ ├─vue-loader.conf.js
│ ├─webpack.base.conf.js
│ ├─webpack.dev.conf.js
│ ├─webpack.prod.conf.js
│ └─webpack.test.conf.js
├─config
│ ├─dev.env.js
│ ├─index.js
│ ├─prod.env.js
│ └─test.env.js
├─...
└─package.json
"scripts": {
"dev": "node build/dev-server.js",
"build": "node build/build.js"
},
运行”npm run dev”的时候执行的是build/dev-server.js文件
运行”npm run build”的时候执行的是build/build.js文件
说明: webpack插件里面多了丑化压缩代码以及抽离css文件等插件。
// 转发请求配置
proxyTable: {
'/api': {
target: 'http://picup.xxxx.net',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
配置了css加载器
//创建一个新数组实例
//将类数组(类似数组的对象和可遍历的对象)转为真正的数组。
// ES5的写法
var arr1 = [].slice.call(arrayLike);
// ES6的写法
let arr2 = Array.from(arrayLike);
//合并两个或多个数组。不更改现有数组,而是返回一个新数组。
//以separator(默认为逗号)拼接为字符串。
//把数组转换为字符串,数组中的元素之间用逗号分隔。
字符串转化为数组:s.split(","); //在每个逗号(,)处进行分解。
//用一个固定值填充[start,end)的元素。
//判断传递的值是否是一个 Array。
//将数组中元素的位置颠倒。
语法:arr.reduce(callback,[initialValue])
- callback(accumulator,currentValue,currentIndex,array)
- accumulator 上一次调用回调返回的值
- currentValue 数组中正在处理的元素
- currentIndex 数据中正在处理的元素索引
- array 调用 reduce 的数组
- initialValue [可选],用于第一次调用 callback 的第一个参数。
//执行一次 callback 函数,直到找到一个使得 callback 返回true。
//数组的所有元素是否都通过callback 函数。
//在数组中返回符合callback第一个元素的值。
//返回数组中满足callback的第一个元素的索引。否则返回-1。
//是否包含一个指定的值
//删除数组最后一个元素,并返回该元素的值。
//增加元素到数组末尾。
//删除数组第一个元素。
//增加元素到数组开头。
//返回[start,end)**浅拷贝**到一个新数组对象,**原数组不会被修改**。
//通过删除现有元素和/或添加新元素来更改一个数组的内容,**会直接对数组进行修改**。
start : 如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从1计数)。
deleteCount : 如果 deleteCount 是 0,则不移除元素,这种情况下,至少应添加一个新元素;如果 deleteCount 大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位);如果deleteCount被省略,则其相当于(arr.length - start)。
item1, item2, ... :要添加进数组的元素
//返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
//返回一个新的Array迭代器,它包含数组中每个索引的键。
//返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
for (let index of ['a', 'b'].keys()) { //遍历键
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) { //遍历值
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) { //遍历键/值对
console.log(index, elem);
}
// 0 "a"
// 1 "b"
var _arguments=Array.prototype.slice.apply(arguments)
|--- branch 本地
|---
|---
|--- test 测试
|--- stable 生产
<div class="item-right" :style="{backgroundImage: 'url('+item.image_lmobile+')'}">
</div>
watch
监听方法// bus.js
import Vue from 'vue'
export default new Vue()
// child.vue
import Bus from '../common/js/bus.js'
Bus.$on('on', (msg) => {
this.message = msg
})
// parent.vue
import Bus from '../common/js/bus.js'
Bus.$emit('on', '来自兄弟组件')
v-for配合key使用,使用key,它会基于key的变化重新排列元素顺序,并且会移除key不存在的元素。
<ul>
<li v-for="item in items" :key="item.id">...</li>
</ul>
js修补匠 babel-polyfill
//安装
npm install --save-dev babel-polyfill
//入口文件引入
import 'babel-polyfill';
this.$nextTick
methods: {
async initData() {
this.menuList = await foodMenu(this.shopId) // 获取菜单
await this.getFoodListHeight() // 计算菜单高度
},
getFoodListHeight(){
this.$nextTick(()=>{
const menuLeft = this.$refs.menuLeft;
const listArr = menuLeft.querySelectorAll('li');
listArr.forEach((item,index)=>{
this.shopListTop[index] = item.offsetTop
})
})
}
}
vue init webpack <project-name>
module.exports = {
entry: {
app: './src/main.js',
admin: './src/main-admin.js'
},
}
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
chunks:['app'], // 用chunks指定对应entry
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
}),
new HtmlWebpackPlugin({
filename: config.build.admin,
template: 'index.html',
inject: true,
chunks: ['admin'],
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
}),
// app.use(require('connect-history-api-fallback')())
const history = require('connect-history-api-fallback');
app.use(history({
rewrites:[
{from:/^\/admin\/.*$/,to:'/admin.html'}
]
}))
将admin转发给admin.html
React 中 setState({key:value})
时当key是一个变量时,这个语句要如何写。
this.setState({
[key]:obj.xxx
})
React-router
性能:
// bad
class extends React.Component {
onClickDiv() {
// do stuff
}
render() {
return <div onClick={this.onClickDiv.bind(this)} />;
}
}
// good
class extends React.Component {
constructor(props) {
super(props);
this.onClickDiv = this.onClickDiv.bind(this);
}
onClickDiv() {
// do stuff
}
render() {
return <div onClick={this.onClickDiv} />;
}
}
每次筛选,重新调用分页
var table;
if(table){
table.fnDestroy(); //每次重绘之前destroy之前的对象
}
table = $('#datatable').dataTable({
"pagingType": "full_numbers", //含首页、尾页
"language": { //国际化配置
oPaginate: {
"sFirst" : "第一页",
"sPrevious" : "上一页",
"sNext" : "下一页",
"sLast" : "最后一页"
}
}
});
node_modules
);assets/icon-delete.png
);components/MyComponent.vue
);prop定义应该尽量详细(以下代码分别提供了 简单语法 和 对象语法 两种示例);
# 简单语法
Vue.component('props-demo-simple', {
props: ['size', 'myMessage']
})
# 对象语法,提供校验
Vue.component('props-demo-advanced', {
props: {
// 检测类型
height: Number,
// 检测类型 + 其他验证
age: {
type: Number,
default: 0,
required: true,
validator: function (value) {
return value >= 0
}
}
}
})
声明 prop 的时候,其命名应该始终使用 camelCase
,而在模板和 JSX 中应该始终使用 kebab-case
(以下代码中,js语法中,命名为 greetingText ,在templete中则使用 greeting-text );
# js
props: {
greetingText: String,
required: true
},
# templete
<WelcomeMessage greeting-text="hi"/>
总是用key
为 v-for
设置键值;
统一使用指令缩写 (用 :
表示 v-bind:
和用 @
表示 v-on:
);
组件/实例的选项应该有统一的顺序:
name,props,components
确定的值;
computed,data
数据;
filters,methods,watch
处理方法;
生命周期。
export default {
name:'', # 组件名
props: { # 属性
status: String,
required: true
},
components: {
# ..引用组件
},
computed: {
# ..计算属性
},
data () {
return {
}
},
filters: {
# ..过滤器
},
methods: {
# ..公共方法
},
watch: {
# ..监听
},
mounted () { # 生命周期按照他们被调用的顺序
},
destroyed () {
}
}
建议工程目录如下,会根据具体项目稍作调整。
├── /dist/ # 项目输出目录
├── /static/ # 静态资源(不需要webpack处理)
├── /src/ # 项目源码目录
│ ├── /assets/ # 资源
│ │ └── /images/ # 图片资源
│ ├── /theme/ # 样式
│ │ └── /common/ # 公共样式 如:reset.scss、mixin.scss、vars.scss
│ ├── /components/ # 组件
│ ├── /views/ # 页面
│ ├── /services/
│ │└── api.js # 数据接口
│ ├── /routes/
│ │ └── index.js # 路由入口
│ ├── /utils/ # 工具函数
│ │ ├── config.js # 项目常规配置
│ │ ├── directive.js # 公共指令
│ │ ├── filters.js # 公共过滤器
│ │ ├── request.js # 异步请求函数
│ │ └── common.js # 公共方法
│ ├── index.js # 入口文件
│ └── index.html
└── package.json # 项目信息
sessionStorage.setItem(key,value);
sessionStorage.gettItem(key);
sessionStorage.remove(key);
存数组
把数组转为字符串存入sessionStorage,取出的时候转化为数组。
存Json对象
把Json对象转为字符串存入sessionStorage,取出的时候转化为Json对象。
JSON.stringify(obj)
JSON.parse(str)
timeupdate
监听播放,控制播放进度条play()
、pause()
实现播放与暂停duration
属性获取音频时长currentTime
音频当前播放位置的获取与设置volume
音量的获取与设置<template>
<div class="audio">
<audio :src="audioSrc" ref="audioRecord" ></audio>
<!-- controls -->
<div class="audio_controls" >
<button :class="play ? 'play':'pause'" @click="togglePlay"></button>
<Slider v-model="time_progress" class="time_progress" @on-change="sliderTime" :tip-format="formatTimeSlider"></Slider>
<div class="time_range">
{{this.formatTime(currentTime)}} / {{this.formatTime(duration)}}
</div>
<div class="voice_progress">
<button :class="sound ? 'lound':'slient'" @click="toggleSound"></button>
<Slider v-model="voice_progress" @on-change="sliderSound"></Slider>
</div>
</div>
</div>
</template>
<script>
export default {
name: "audioRecord",
props:['audioSrc'],
data(){
return{
play:true,
currentTime:0,
duration:0,
time_progress:0,
sound:true,
voice_progress:50
}
},
methods:{
formatTime(val){
let second = parseInt(val);
let HH = Math.floor(second / 3600),MM = Math.floor(second % 3600 / 60),SS = second % 60;
if(HH<10){HH = `0${HH}`};
if(MM<10){MM = `0${MM}`};
if(SS<10){SS = `0${SS}`};
let min = `${HH}:${MM}:${SS}`;
return min;
},
// 播放
togglePlay(){ // 开始暂停
let method = this.play ? 'play' : 'pause';
this.play = !this.play;
this.$refs.audioRecord[method]();
},
handleProgress(){
const audioRecord = this.$refs.audioRecord,
_currentTime = audioRecord ? audioRecord.currentTime : 0;
if(_currentTime==this.duration){
this.play = true;
}
this.currentTime = _currentTime;
this.time_progress = _currentTime/this.duration * 100;
},
sliderTime(val){ // 切换播放时间点
this.$refs.audioRecord.currentTime = (val/100) * this.duration;
},
formatTimeSlider(val){
return this.formatTime(val*this.duration/100);
},
// 音量
toggleSound(){ // 静音切换
this.sound = !this.sound;
if(this.sound){
this.$refs.audioRecord.volume = this.voice_progress/100;
}else{
this.$refs.audioRecord.volume = 0;
}
},
sliderSound(val){ // 音量调节
this.$refs.audioRecord.volume = val/100;
val==0 ? this.sound=false : this.sound=true;
}
},
mounted(){
const audioRecord = this.$refs.audioRecord;
audioRecord.oncanplay=()=>{ this.duration = audioRecord.duration}; // 监听oncanplay
this.$refs.audioRecord.addEventListener('timeupdate', this.handleProgress); // 监听播放
audioRecord.volume = this.voice_progress/100;
}
}
</script>
<style scope>
button{
border: 0;
outline: 0;
}
.audio{
width: 100%;
height: 48px;
border-radius: 2px;
background-color: #fafafa;
}
.audio_controls{
height: 100%;
display: -webkit-flex; /* Safari */
display: flex;
justify-content: center;
align-items: center;
align-content:center;
}
/* 开始/暂停按钮 */
.play,.pause{
width: 26px;
height: 26px;
background-color: #03a9f4;
background-position: center;
background-repeat: no-repeat;
background-image: url(../../assets/images/mp3/play.png);
border-radius: 50%;
margin-right: 10px;
}
.play{
background-image: url(../../assets/images/mp3/play.png);
}
.pause{
background-image: url(../../assets/images/mp3/pause.png);
}
/* 时间 */
.time_range{
width: 140px;
text-align: center;
}
/* 进度条 */
.time_progress{
width: 300px;
}
.voice_progress .ivu-slider{
width: 120px;
display: inline-block;
vertical-align: middle;
}
/* 音量 */
.voice_progress .ivu-tooltip-rel{
display:none;
}
.lound,.slient{
vertical-align: middle;
width: 26px;
height: 26px;
background-position: center;
background-repeat: no-repeat;
background-color: #fff;
}
.lound{
background-image: url(../../assets/images/mp3/openvoice.png);
}
.slient{
background-image: url(../../assets/images/mp3/closevoice.png);
background-position: left center;
}
</style>
audio.duration
的值为NaN
监听canplay
事件
进度条与currentTime不匹配
获取的currentTime
不需要parseInt,在format事件格式的时候再parseInt
-webkit-tap-highlight-color: color | transparent
当用户点击可点击元素,显示的高亮颜色。
-webkit-appearance:none | button | button-bevel ....
改变按钮和其他控件的外观
-webkit-input-placeholder: color
设置placeholder的颜色
flex 垂直居中:
.wrap{
display: flex;
flex-direction: column;
justify-content: center;
}
超过N行展示...:
.list{
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
text-overflow: ellipsis;
-webkit-line-clamp: N;
word-break: break-all;
}
//强制换行,不同换行依据:
word-break: break-all; //只对英文起作用,以字母作为换行依据。
word-wrap: break-word; //只对英文起作用,以单词作为换行依据。
white-space: pre-wrap; //只对中文起作用,强制换行。
移动端横向滚动:
.nav ul {
position: absolute;
left: 0;
top: 0;
overflow: hidden;
overflow-x: scroll;
overflow-scrolling: touch;
-webkit-overflow-scrolling: touch;
white-space: nowrap;
padding: 0 15px;
height: 50px;
font-size: 0;
}
// html
div.scroll-nav>ul.nav-list>li.item-list>a
// css
.scroll-nav {
overflow: hidden;
overflow-x: auto;
}
.scroll-nav .nav-list {
padding-bottom: 2rem;
white-space: nowrap;
font-size: 0;
}
.scroll-nav .item-list {
display: inline-block;
vertical-align: middle;
}
弹框出现的时候 遮罩层下面防止滚动
body.lock-position {
height: 100%;
overflow: hidden;
width: 100%;
position: fixed;
}
text-transform: capitalize; 首字母大写
text-transform: uppercase; 转化为大写
text-transform:lowercase; 转化为小写
touch-action:none; 禁用手势
touch-action: pan-y pinch-zoom; 处理水平平移的图像轮播,但不想干扰网页的垂直滚动或缩放。
touch-action: manipulation; 只允许进行滚动和持续缩放操作。
1 用户名正则
①中文、英文、数字、“”,要求2-16个字符"
/^[0-9a-zA-Z\u4e00-\u9fa5]{2,16}$/
②4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/
2 密码强度正则
①最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.(?=.{6,})(?=.\d)(?=.[A-Z])(?=.[a-z])(?=.[!@#$%^&? ]).*$/
②6-10位,数字或字母组成
/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/
^ 匹配一行的开头位置
(?![0-9]+$) 预测该位置后面不全是数字
(?![a-zA-Z]+$) 预测该位置后面不全是字母
[0-9A-Za-z] {6,10} 由6-10位数字或这字母组成
$ 匹配行结尾位置
3 整数正则
①正整数正则
var posPattern = /^\d+$/;
②负整数正则
var negPattern = /^-\d+$/;
③整数正则
var intPattern = /^-?\d+$/;
3.手机号
/^1(3|4|5|7|8)\d{9}$/
// 判断是否为手机号
isPoneAvailable: function (pone) {
var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
if (!myreg.test(pone)) {
return false;
} else {
return true;
}
},
// 判断是否为电话号码
isTelAvailable: function (tel) {
var myreg = /^(([0+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;
if (!myreg.test(tel)) {
return false;
} else {
return true;
}
}
文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。
为简单起见,在API参考文档中的语法实例通常会使用element(s) 指代节点,使用nodeList(s)或 element(s)来指代节点数组,使用 attribute(s)来指代属性节点。
在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点:
//返回匹配的第一个元素
//返回匹配的元素集合
//父节点
//子节点
//第一个子元素节点
//最后一个子元素节点
//上一个元素节点
//下一个元素节点
//在指定的已有的子节点之前插入新节点。
//向元素添加新的子节点,作为最后一个子节点。
//移除子节点
- cloneNode() 方法创建节点的拷贝,并返回该副本。
- cloneNode() 方法克隆所有属性以及它们的值。
- 如果需要克隆所有后代,把 deep 参数设置 true,否则设置为 false。
//替换元素中的子节点。
element.attributes //返回元素属性的 NamedNodeMap。
element.getAttribute() //返回指定属性值。
element.hasAttribute() //元素是否拥有指定属性。
element.setAttribute() //设置属性值。
element.removeAttribute() //移除属性。
element.textContent //设置或返回文本内容。
element.innerHTML //设置或返回元素的内容。
document.body.classList.add("a","b");
document.body.classList.remove("a");
document.body.classList.contains('myclass');
document.body.classList.toggle('classtest');
element.clientHeight //返回元素的可见高度。
element.clientWidth //返回元素的可见宽度。
element.offsetHeight //返回元素的高度。
element.offsetWidth 返回元素的宽度。
//html:
div.panels>div.panel*5
//js
var panels = document.querySelectorAll('.panel'); //获取panel的NodeList
panels.forEach(panel=>{panel.addEventListener('click',toggelClass)}); //监听点击事件
function toggelClass(){
let siblings = [].filter.call(this.parentNode.children,child=>child!==this); //获取兄弟元素
siblings.forEach(item=>item.classList.remove('open'));
this.classList.add('open');
}
语法结构及用法:
@media 设备名 only (选取条件) not (选取条件) and(设备选取条件),设备二{sRules}
<img src="/static/images/[email protected]" srcset="/static/images/[email protected] 2x, /static/images/[email protected] 3x">
'image/*'
'image/jpg,image/jpeg,image/png'
配色、字体:
{
"workbench.colorTheme": "Visual Studio Dark",
"editor.fontSize": 20,
"editor.fontFamily": "Consolas, 'Courier New', monospace",
}
主题: atom one dark
background 背景
Import Cost 计算引入文件大小
Bracket Pair Colorizer 用更清晰的彩色展示 ()/[]/{}
View InBrowser在浏览器中打开
beautify美化代码
filesize
计算当前文件大小
div --> <div></div>
doc --> <!DOCTYPE html>
a --> <a href=""></a>
Atuo Rename Tag修改 html 标签,自动帮你完成尾部闭合标签的同步修改
快捷键 | 功能 |
---|---|
vbase | 生成vue基础模板 |
vimport | import New from './components/New.vue'; |
vmodel 、 vsrc 、 vclass、 vfor 、von | <template> 生成对应语法模板 |
vdata 、 vmethod 、vcomputed 、vfilter | <script> 生成对应语法模板 |
is : 判断数据类型
https://www.npmjs.com/package/is
[http://www.cnblogs.com/savokiss/p/6474673.html](node-sass 安装)
使用方法一
npm install node-sass -g -d
JavaScript 通过XMLHttpRequest(XHR)来执行异步请求,它在设计上不符合职责分离原则,将输入、输出和用事件来跟踪的状态混杂在一个对象里。fetch的出现正是为了解决上面提到的那些缺陷。
fetch是相对较新的技术,在使用fetch来进行项目开发时,先了解fetch在浏览器兼容性的问题。
fetch基于Promise来实现,在低版本浏览器中Promise可能也未被原生支持,所以除了fetch本身的polyfill,还需要Promise的polyfill:
Fetch引入了3个接口,它们分别是 Headers,Request 以及 Response 。
Headers接口是一个简单的多映射的名-值表,允许您对HTTP请求和响应头执行各种操作。
Request接口定义了通过HTTP请求资源的request格式。
通常在fetch()的回调中获得。
请求一个URL,获取JSON格式的返回结果。
fetch(url,options).then(response => response.json())
.then(data => console.log(data))
.catch(e => console.log("Oops, error", e))
最佳实践为工作总结,根据工作中的应用不断更新。
//javascript
import base64url from 'base64url';
const url = ''; //请求url
const requset={}; //请求数据
fetch(url,
{ method: "POST", //请求方法:POST
mode:"cors", //请求模式:支持跨域请求
cache: 'reload', //请求cache模式:reload
body :JSON.stringify(requset) //请求的 body 信息
}).then(response => { return response.text()})
.then(response => console.log(JSON.parse(base64url.decode(response))))
.catch(e => console.log("Oops, error", e))
安装
npm install echarts -S
chart.vue
// html
<div id="myChart" :style="{width: '100%', height: '300px'}"></div>
//js
import echarts from 'echarts'
export default{
data (){
return (
chart:null
)
},
mounted() {
this.chart = echarts.init(document.getElementById('myChart')) // 初始化
this.drawLine();
},
methods(){
drawLine(){
const self = this;
// 绘制图表
this.chart.setOption({
grid: { // 位置
left: '3%',
right: '3%'
},
title: { // 标题
show:false,
text: '销量'
},
tooltip: {
trigger: 'axis'
},
toolbox: { // 工具栏
feature: {
saveAsImage: {}
}
},
legend: { // 图例
x:"center",
y:"bottom",
data:[{
name: '销量',
icon:'circle'
}]
},
xAxis: {
data:["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
type: 'category',
nameGap:10, //名称与X轴的距离
boundaryGap : false,//坐标的刻度是否在中间
axisLine:{//坐标轴线条相关设置(颜色等)
lineStyle:{
color:'#ccc'
}
},
axisLabel:{ //坐标轴刻度标签
margin:7, //刻度标签与轴线之间的距离
textStyle:{
color:"#999", //坐标轴刻度文字的颜色
fontSize:'12px' //坐标轴刻度文字的大小
}
},
},
color:['#2d8cf0'],
yAxis: {
type: 'value',
nameGap:10, //名称与Y轴的距离
name:self.statisticList[self.seletChart].unit, //坐标轴名称
nameTextStyle:{ //名称的样式
color:'#999',
fontSize:'12px'
},
axisTick:{ //坐标轴刻度相关设置
length:'0' //设置成0了
},
axisLine:{//坐标轴线条相关设置(颜色等)
lineStyle:{
color:'#ccc'
}
},
axisLabel:{//坐标轴标签相关设置,距离颜色等
margin:7,
textStyle:{
color:"#999", //坐标轴刻度文字的颜色
fontSize:'12px' //坐标轴刻度文字的大小
},
}
},
series: [ {
name:'销量',
type:'line',
data:[5, 20, 36, 10, 10, 20]
}]
});
}
}
}
根据窗口宽度变化实现自适应
const self = this;
window.addEventListener("resize", function () {
self .chart.resize();
});
autocomplete-paths 文件路径自动建议
file-icons 文件图标
快捷键:ctrl+~
minimap 代码缩略图
highlight-line 高亮当前行
highlight-selected 高亮所有选择
atom-beautify 美化 HTML, CSS, JavaScript 等代码
快捷键:ctrl+alt+B
emmet 快速html代码
autoclose-html HTML标签自动闭合
open-in-browser 浏览器中打开
atom-html-preview 在编译器中实时展示页面
快捷键:ctrl-shift-H
css-snippets css语法提示
pigments颜色显示
color-picker 取色器
右键→Color Picker
setting中 run on save 勾选中
language-vue vue语法支持
vue2-autocomplete vue2自动补充
template 、 vscript
Language Markdown markdown语法支持
markdown-preview-plus markdown预览
tool-bar-markdown-writer markdown工具条
visibility 设置:showToolbarOnMarkdown, 同时安装 tool-bar 和 markdown-writer 两个插件。
<a slot="close" @click="cancel"><Icon type="ios-close-empty"></Icon></a>
<div slot="footer">
<Button type="primary" size="large" @click="addcategroy">确定</Button>
<Button size="large" @click="cancel">取消</Button>
</div>
footer-hide : hide footer
.ivu-select-dropdown {
position: absolute !important;
}
new Vue({
el: '#app',
data () {
const self = this;
return {
...写在这里
}
}
})
设置:default-file-list="defaultList"
清除方法: this.defaultList = []
<Form @submit.native.prevent>
// 按钮
import Button from 'iviewui/button';
Vue.component('Button', Button);
// 选择列表
import { Select, Option } from 'iviewui/select';
Vue.component('Select', Select);
Vue.component('Option', Option);
// 菜单栏
import Menu from 'iviewui/menu';
Vue.component('Menu', Menu);
Vue.component('Submenu', Menu.Sub );
Vue.component('MenuItem', Menu.Item );
// 提示消息
import Message from 'iviewui/message';
Vue.component('Message', Message);
Vue.prototype.$Message = Message;
但是最终还是选择 下载源代码,注释不需要的组件,重新打包。。
// webpack.base.config.js
module: {
rules: [
{ test: /iview.src.*?js$/, loader: 'babel' },
{ test: /\.js$/, loader: 'babel', exclude: /node_modules/ }
]
}
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.