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. Linux_高级用法

    LInux如何压缩和解压文件 文件压缩与解压主要讲zip和tar 安静模式和文件夹 zip -r -q -o test.zip 需要打包文件 查看打包文件 du -h test.zip 上节学过的fi ...

  2. Eclipse 常用配置和基本调试

    常用配置 1.显示行号:window->Preferences->General->Editors->Text Editors , 勾选show line numbers 2. ...

  3. transform-transition-animation(1)

    网布就是我们的屏幕,x轴沿屏幕平行的水平方向,y轴沿屏幕平行的垂直方向,z轴沿与屏幕垂直方向. rotateX(angle), rotateY(angle), rotateZ(angle), rota ...

  4. python基础学习(十四)

    28.模块当脚本执行 !!!! 注意  这是分两个文件的  一个是student.py和app3.py student.py name = "Song Ke" name_list ...

  5. 解决idea tomcat乱码问题

    解决idea Server Output.TomcatLocalhost Log.Tomcat Catalina Log控制台乱码问题 问题原因:编码不一致,tomcat启动后默认编码UTF-8,而w ...

  6. Android持久化存储——(包含操作SQLite数据库)

    <第一行代码>读书手札 你可能会遇到的问题:解决File Explorer 中无显示问题 Android中,持久化存储,常见的一共有三种方法实现 (一.)利用文件存储 文件存储是Andro ...

  7. 题解-AtCoder ARC-083F Collecting Balls

    Problem ARC083F 题意概要:给定 \(2n\) 个二维平面上的球,坐标分别为 \((x_i,y_i)\),并给出 \(n\) 个 \(A\)类 机器人 和 \(n\) 个 \(B\)类 ...

  8. 用chattr命令防止系统中某个关键文件被修改

    用chattr命令防止系统中某个关键文件被修改:# chattr +i /etc/resolv.conf

  9. sql server中:isnull(列名,0) 和isnull(列名,0)<>0 的区别

    1.isnull(参数1,参数2),判断参数1是否为NULL,如果是,返回参数2,否则返回参数1. 2.isnull(列名,0),isnull()函数是用来判断列名是否为null,如果为NUll,则返 ...

  10. navicate的使用及用Python操作数据额库

    Navicat使用 下载地址:<https://pan.baidu.com/s/1bpo5mqj> Navicat是基于mysql操作的,所以能否自主完成一些练习,就能够运用Navicat ...