1. 快速变成 String 格式:

{
stamp: +new Date()
}

2. 封装axios请求:

axios.get(this.URI, {
params: { },
withCredentials: true //这里表示axios跨域请求携带 cookies
})
.then(response => {
let rst = response.data;
if (rst.msg == '成功' && rst.code == '1000') {
callback && callback(rst.rs);
} else {
errCallback && errCallback();
}
})
.catch(error => {
errCallback && errCallback();
});

且后端需要配置:

  1. Access-Control-Allow-Origin 字段必须指定域名,不能为*

  2. Access-Control-Allow-Credentialstrue

3. 循环渲染的item,如果要处理数据,可以使用函数处理,然后再return给 html:

<div
v-for="(item, index) in bannerData"
:key="index"
>
<img
alt=""
:data-src="imgCut(item.pictureUrl, '750x175')"
class="nut-img-lazyload"
/>
</div> {
methods:{
imgCut:(item,str){
return item+'str'
}
}
}

此外,注意一下图片懒加载的问题。

4. 给某个不方便设置宽高的蒙层设置 box-shadow 也可以撑满整个屏幕

.guide-line {
position: relative;
z-index:;
box-shadow: 0 0 0 2000px greenyellow;
}

5. 设置动画,要求 div 左右3D旋转,然后从上往下动作,关键代码:主要是 perspective 的使用。

.guide-card {
position: absolute;
left: 50%;
top: 50%;
top: 2.94rem;
width: 7.24rem;
height: 3.94rem;
margin-left: -3.62rem;
transform: perspective(500px) rotateY(0deg);
transition: transform 1s;
transform-style: preserve-3d;
perspective: 500px;
z-index:;
&-animate {
animation: reversal 0.9s ease-out 2s forwards;
}
@keyframes reversal {
70% {
transform: perspective(500px) rotateY(180deg);
top: -1.5rem;
z-index:;
}
100% {
transform: perspective(500px) rotateY(180deg);
top: 0.13rem;
z-index:;
}
}
}

6. 页面按需加载,不需要更改webpack,但是打包后的代码会分成 N 份 js。

import Vue from "vue";
import VueRouter from "vue-router";
// 懒加载(按需加载)
const FeedBack = () => import("./view/feedback.vue");
const Personal = () => import("./view/personal.vue");
const MyFeedback = () => import("./view/myfeedback.vue");
const MyFocus = () => import("./view/MyFocus.vue");
const MyDeal = () => import("./view/MyDeal.vue");
Vue.use(VueRouter); const routes = [
{ path: "/feedback", component: FeedBack,
meta: { keepAlive: false, title: "提交问题"}
},
{ path: "/personal", component: Personal,
meta: { keepAlive: false, title: "个人中心"}
},
{ path: "/myfd", component: MyFeedback,
meta: { keepAlive: false, title: "我的反馈"}
},
{ path: "/myfocus/:count", component: MyFocus,
meta: { keepAlive: false, title: "我的关注"}
},
{ path: "/mydeal/:count", component: MyDeal,
meta: { keepAlive: false, title: "我的待办"}
}
];

上述方法,会分成0 1 2.。。等数字的js文件,所以要加上注释,变成trunkName

const Home = ()=> import(/* webpackChunkName:"home"*/"./view/home");
const TopStrategy = ()=> import(/* webpackChunkName:"topStrategy"*/"./view/topStrategy");
const TopBattle = ()=> import(/* webpackChunkName:"topBattle"*/"./view/topBattle");
const TopIssue = ()=> import(/* webpackChunkName:"topIssue"*/"./view/topIssue");
const TopHelp = ()=> import(/* webpackChunkName:"topHelp"*/"./view/topHelp");
const TopTask = ()=> import(/* webpackChunkName:"topTask"*/"./view/topTask");

组件懒加载:

// 下面2行代码,没有指定webpackChunkName,每个组件打包成一个js文件。
const ImportFuncDemo1 = () => import('../components/ImportFuncDemo1')
const ImportFuncDemo2 = () => import('../components/ImportFuncDemo2')

webpack打包也会生成2个单独的js代码,写别名:

const AddMeetingDialog = ()=>import("./component/AddMeetingDialog.vue"/*webpackChunkName:"addmeet"*/);

7 添加水印:

addWaterMarker(dom,str){
var can = document.createElement('canvas');
var mask = document.createElement('div');
var body = document.body;
body.appendChild(can);
dom.appendChild(mask);
dom.style.position='relative';
mask.style.position='absolute';
mask.style.left = 0;
mask.style.right = 0;
mask.style.top = '-50px';
mask.style.bottom = 0;
can.style.display='none';
can.width=200 + str.length * 5; //画布的宽
can.height=212;//画布的高度
var ctx = can.getContext('2d');
ctx.clearRect(0,0,can.width,can.height); //绘制之前画布清除
ctx.font="12px Helvetica";
ctx.rotate(-45*Math.PI/180);
ctx.fillStyle = "rgba(0,0,0,0.1)";
ctx.fillText(str, -30, 200);
mask.style.pointerEvents='none';
mask.style.backgroundImage="url("+can.toDataURL("image/png")+")"; //把画布插入到dom中
}

8 . vue 过滤器使用

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<script src="js/vue.js"></script>
<title></title>
</head>
<body> <div id="container">
<p>{{msg}}</p>
<h1>{{price}}</h1>
<h1>{{price | myCurrency('¥')}}</h1>
</div> <script>
// filter
new Vue({
el: '#container',
data: {
msg: 'Hello Vue',
price:356
},
//过滤器的本质 就是一个有参数有返回值的方法
filters:{
myCurrency:function(myInput,arg1){
console.log(arg1);
//根据业务需要,对传来的数据进行处理
// 并返回处理后的结果
var result = arg1+myInput;
return result;
}
}
})
</script> </body>
</html>

在或者

<a :href="item | getHref" />  //这里定义 item是参数 getHref是函数 在filter中定义

import filters from '../mixin/filters.js';
//过滤器的本质 就是一个有参数有返回值的方法
export default {
filters: {
getHref(item) {
const ua = navigator.userAgent;
//根据业务需要,对传来的数据进行处理
// 并返回处理后的结果
if (plusFrom == 'wq') {
return item.weixinHref || 'javascript:;';
} else if (/jdapp/i.test(ua)) {
return item.openappHref || 'javascript:;';
} else {
return item.imageHref || 'javascript:;';
}
}
},
}

官方Vue定义: https://cn.vuejs.org/v2/guide/filters.html#ad

9  js中a?b:c和a&&b||c有什么区别

a?b:c    // a为true时返回b;false时返回c
a&&b||c // a,b都不是假值,返回b;a,b其中有一个是假值,返回c

也就是说 三目运算符只看a是否为true,为true则返回b,为false则返回c;

而a&&b||c,同样先看a,如果a为true,且b为true则返回b;如果b为false 则返回c

       如果a为false,则返回c(c肯定为true的条件下)

也就是说下面这种情况肯定会返回有数值。

10.使用scss设置webp 图片:

/*
通过这个函数来引入图片,例如:
#wrapper{ @include bg('../img/sample.jpg') }
这段代码经过编译后便会生成如下两句代码
#wrapper{ background-image:url('../img/sample.jpg'); }
.webp #wrapper{ background-image:url('../img/sample.jpg.webp'); }
*/
@mixin bg($url) {
background-image: url($url);
@at-root(with: all) .webp & {
background-image: url($url + '.webp');
}
}

其中  @at-root 经常和 & 一起,表示放在嵌套器的最外层:

.a{
.b{
.c{
@at-root .e &{
color:red;
}
}
}
}

等价于:

.e .a .b .c {color:red;}

默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support。

如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。

这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support,因为@support目前还无法广泛使用,所以在此不表)。

webp图片实践之路

具体:

@mixin bg($url) {
background:#f5ca3a;
background-repeat: no-repeat;
background-image: url($url);
@at-root(with: all) .webp & {
background-image: url($url + '.webp');
}
}
.warpper{
li {
width: 100%;
&:before {
@include bg('../img/pr-icon.png');
}
}
}

11

let aa = [1,2,3];
let bb = [...aa];
bb[1]=5;
console.log(aa); //[1,2,3]
console.log(bb); //[1,5,3]
---- let cc = [
{
name:'xiaohua',
age:20
},
{
name:'xiaogao',
age:21
}
]
let dd = [...cc];
cc[1].age = 31;
console.log(cc); //[{name: "xiaohua", age: 20},{name: "xiaogao", age: 31}]
console.log(dd); //[{name: "xiaohua", age: 20},{name: "xiaogao", age: 31}] //综上,es6的扩展数组方法 只能浅复制 --- const aa = [];
aa.push({
name:'xiaohua',
age:21
})
console.log(aa);//可以 --
qs.stringify()将对象 序列化成URL的形式,以&进行拼接。
var a = {name:'hehe',age:10};
qs.stringify(a)
// 'name=hehe&age=10'
JSON.stringify(a)
// '{"name":"hehe","age":10}' let timer = settimeout(()=>{
console.log('ss');
},1000); clearTimer()

plus代码闪光点的更多相关文章

  1. 教你在不使用框架的情况下也能写出现代化 PHP 代码

    我为你们准备了一个富有挑战性的事情.接下来你们将以 无 框架的方式开启一个项目之旅. 首先声明, 这篇并非又臭又长的反框架裹脚布文章.也不是推销 非原创 思想 .毕竟, 我们还将在接下来的开发之旅中使 ...

  2. .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)

    一.前言     上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案,另外如果没看我上篇博客的人最好看一下,否则你可能看的云里雾里的,这里我就不进行具体的方案 ...

  3. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  4. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  5. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  6. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  7. redux-amrc:用更少的代码发起异步 action

    很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...

  8. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  9. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

随机推荐

  1. 批处理快速合并多分Excel文件并将指定列的数据去重复

    1.批处理快速合并多个excel文件方法: 新建一个.txt文本文件,就命名为合并.txt吧. 而后开启文件,复制以下代码到文件中: @echo off E: cd xls dir copy *.cs ...

  2. jquery设置滚动条样式

    HTML结构 下面是该滚动条插件工作所必须的HTML结构: <div id="about" class="nano">     <div cl ...

  3. picard报错

    /home/yueyao/bio/anaconda2/bin/java -jar /home/yueyao/bio/anaconda2/share/picard-2.14.1-0/picard.jar ...

  4. ucore 源码剖析

    lab1 源码剖析 从实模式到保护模式 初始化ds,es和ss等段寄存器为0 使能A20门,其中seta20.1写数据到0x64端口,表示要写数据给8042芯片的Output Port;seta20. ...

  5. juc-locks包

    1. 简介 java.util.concurrent.locks 包含常用的锁实现,重点研究AbstractQueuedSynchronizer.ReentrantLock.ReentrantRead ...

  6. 关于time_wait状态的理解

    TIME_WAIT状态之所以存在,是为了保证网络的可靠性 有以下原因: 1.为实现TCP全双工连接的可靠释放    当服务器先关闭连接,如果不在一定时间内维护一个这样的TIME_WAIT状态,那么当被 ...

  7. noip2019集训测试赛(二十一)Problem B: 红蓝树

    noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君 ...

  8. 第五章 模块之 getpass、sys、os

    5.5 getpass 密码不显示(只能在终端运行) 密码不显示(只能在终端运行) import getpass​pwd = getpass.getpass('请输入密码:')if pwd == '1 ...

  9. python学习-40 生产者和消费者模型

    import time def buy(name): # 消费者 print('%s上街去买蛋' %name) while True: eggs=yield print('%s买了%s' %(name ...

  10. Django出错Xadmin后台报list index out of range

    input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/>&l ...