plus代码闪光点
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();
});
且后端需要配置:
Access-Control-Allow-Origin
字段必须指定域名,不能为*
Access-Control-Allow-Credentials
为true
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
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目前还无法广泛使用,所以在此不表)。
具体:
@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代码闪光点的更多相关文章
- 教你在不使用框架的情况下也能写出现代化 PHP 代码
我为你们准备了一个富有挑战性的事情.接下来你们将以 无 框架的方式开启一个项目之旅. 首先声明, 这篇并非又臭又长的反框架裹脚布文章.也不是推销 非原创 思想 .毕竟, 我们还将在接下来的开发之旅中使 ...
- .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)
一.前言 上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案,另外如果没看我上篇博客的人最好看一下,否则你可能看的云里雾里的,这里我就不进行具体的方案 ...
- 日期格式代码出现两次的错误 ORA-01810
错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- redux-amrc:用更少的代码发起异步 action
很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序
直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...
随机推荐
- R镜像源的切换
如果是默认的R安装一般会很慢 install.packages(pkgs, lib, repos = getOption("repos"), contriburl = contri ...
- Linux将.deb以绿色免安装的方式“安装”
1.如果是xxx.deb文件,一般网上都是教你dkpg -i xxx.deb,但是这种方式类似windows里的安装,可能会在很多地方生成一些“垃圾”数据[比如不需要在dpkg安装应用信息文件里写入此 ...
- Python 解LeetCode:394 Decode String
题目描述:按照规定,把字符串解码,具体示例见题目链接 思路:使用两个栈分别存储数字和字母 注意1: 数字是多位的话,要处理后入数字栈 注意2: 出栈时过程中产生的组合后的字符串要继续入字母栈 注意3: ...
- Sublime实现自动排版
sublime功能很强大, 但是使用sublime就可以实现代码自动重新缩进,使代码缩进重排 方法:Ctrl+A选中全部内容,然后在菜单中选择Edit->Line->Reindent
- Linux主要目录速查表
/:根目彔.一般根目录下只存放目录,在linux下有且只有一个根目彔,所有的东西都是从这里开始 当在终端里输入/home.其实是在告诉电脑,先从/(根目录)开始,再进入到honie目录 /bin./u ...
- 2019牛客多校八 H. How Many Schemes (AC自动机,树链剖分)
大意: 给定树, 每条边有一个字符集合, 给定$m$个模式串, $q$个询问$(u,v)$, 对于路径$(u,v)$中的所有边, 每条边从对应字符集合中取一个字符, 得到一个串$s$, 求$s$至少包 ...
- 理解javascript中的立即执行函数(function(){})()(转)
原文:https://www.cnblogs.com/yanzp/p/6371292.html
- RMAN备份脚本执行遇到RMAN-03002,06091问题处理
一 问题描述 客户说RMAN备份脚本执行有的时候报错,有的时候正常!!! 远程登陆客户环境,查询最后一次备份的日志报错信息,得到 RMAN-03002: failure of delete comma ...
- 线程三(Mutex)
C# 中 Mutex 类也是用于线程同步操作的类,例如,当多个线程同时访问一个资源时保证一次只能有一个线程访问资源. 在 Mutex 类中,WaitOne() 方法用于等待资源被释放, Release ...
- U盘安装Ubuntu14.04&配置远程win10远程连接
1.U盘安装Ubuntu:https://blog.csdn.net/baigoocn/article/details/26561473 2.win10远程访问Ubuntu系统:https://www ...