基于vue项目的js工具方法汇总
以下是个人在vue项目的开发过程中经常会用到的一些公共方法,在此进行汇总,方便以后及有需要的朋友查看~
let util = {};
/**
* @description 日期格式化
* @param {Date} date 日期
* @param {String} fmt 日期格式 eg: yyyy-MM-dd hh:mm:ss
*/
util.dateFormat = function (date, fmt) {
var o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
'S': date.getMilliseconds() // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
}
}
return fmt;
};
/**
* @description 文件下载
* @param {Object} data 数据
* @param {String} fileName 下载文件名
*/
util.download = function (data, fileName) {
//创建一个blob对象,file的一种
let blob = new Blob([data], { type: 'application/x-xls' });
if ('download' in document.createElement('a')) { // 非IE下载
let link = document.createElement('a');
if (window.URL) {
link.href = window.URL.createObjectURL(blob);
} else {
link.href = window.webkitURL.createObjectURL(blob);
}
link.download = fileName;
document.body.appendChild(link);
link.click();
link.remove();
}else { // IE10+下载
navigator.msSaveBlob(blob, fileName);
}
};
/**
* @description 校验导入execl格式
* @param {file} file 导入文件对象
*/
util.validateExecl = function(file) {
const isXLS = file.type === 'application/vnd.ms-excel';
const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
if (!isXLS && !isXLSX) {
this.$message.error('只支持导入execl文件');
return false;
}
};
/**
* @description 校验上传图片格式和大小
* @param {file} file 导入文件对象
*/
util.validateImage = function(file) {
const isPNG = file.type.toLowerCase() === 'image/png';
const isJPG = file.type.toLowerCase() === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) {
this.$message.error('上传图片只能是JPG或PNG格式!');
return false;
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 2M!');
return false;
}
};
AES加密/解密,需要先安装依赖 crypto-js。注:具体的选项参数可自行百度了解噢
// 自定义密钥
const key = CryptoJS.enc.Utf8.parse('ljycykxbchsbqtcy')
// 加密
util.encrypt = function(str) {
let srcs = CryptoJS.enc.Utf8.parse(str)
let encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7})
return encrypted.toString()
};
// 解密
util.decrypt = function(str) {
let decrypt = CryptoJS.AES.decrypt(str, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7})
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
};
MD5加密,需要先安装依赖 js-md5
// 在main.js中添加以下代码
import md5 from 'js-md5';
Vue.prototype.$md5 = md5; // str为需要加密字段
let md5Str = this.$md5(str);
/**
* @description 倒计时
* @param {} time 绑定展示的倒计时时间,初始值60s
*/
let timer = null
timer = setInterval(function() {
if(this.time > 0) {
this.time--
}else {
clearInterval(timer)
}
}, 1000)
转换file文件对象为base64字符串
let reader = new FileReader()
// file为通过上传组件选择的文件对象
reader.readAsDataURL(file)
reader.onload = function(e) {
let base64 = e.target.result
}
/**
* @description 四舍五入
* @param {Number} num 数值
* @param {Number} digits 小数位数
*/
util.round = function (num, digits) {
return Math.round(num * Math.pow(10, digits)) / Math.pow(10, digits);
};
/**
* @description 回到顶部
*/
util.backTop= function () {
let timer = setInterval(() => {
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
let ispeed = Math.floor(-scrollTop / 5);
document.documentElement.scrollTop = document.body.scrollTop = scrollTop + ispeed;
if(scrollTop === 0) {
clearInterval(timer);
}
}, 10);
};
/**
* @description 数组对象排序
* @param {Array} array 数组
* @param {String} prop 排序字段
* @param {String} order 升序或降序, asc:升序|desc:降序
*/
sortData(array, prop, order) {
array.sort(function(item1, item2){
let value1 = item1[prop];
let value2 = item2[prop];
if(value1 < value2) {
return order == 'desc' ? 1 : -1;
}else if (value1 > value2) {
return order == 'desc' ? -1 : 1;
}else {
return 0;
}
});
}
/**
* @description 快速排序
* @param {Array} arr 数组
*/
quickSort(arr) {
if(arr.length <= 1) {
return arr;
}
var index = Math.floor(arr.length / 2);
var pivot = arr.splice(index, 1)[0];
var left = [], right = [];
for(var i = 0; i < arr.length; i++) {
if(arr[i] < pivot) {
left.push(arr[i]);
}else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
export default util;
持续更新中~~
基于vue项目的js工具方法汇总的更多相关文章
- webstorm如何调试vue项目的js
webstorm如何调试vue项目的js webstormvuewebstorm调试jsjs 1.编辑调试配置,新建JavaScript调试配置,并设置要访问的url地址,如下图所示: 在URL处填写 ...
- Vue项目的npm环境搭建
Vue项目的环境搭建主要步骤如下: vue项目创建 安装NodeJS +到官网下载自己系统对应的版本,这里我们下载Windows系统的64位zip文件,下载完成后解压,可以看到里面有一个node.ex ...
- 基于Vue cli生成的Vue项目的webpack4升级
前面的话 本文将详细介绍从webpack3到webpack4的升级过程 概述 相比于webpack3,webpack4可以零配置运行,打包速度比之前提高了90%,可以直接到ES6的代码进行无用代码剔除 ...
- 基于apktool项目的android批量打包工具,多平台支持
好久木有写博客了,今天有点兴致就写一下,献上一个没怎么用的批量打包工具,python实现的,虽然说现在android的批量打包有一个很好的工具可以使用gradle,这个灰常牛叉的工具和android ...
- vue项目的webpack设置请求模拟数据的接口方法
最近在跟着视频写饿了吗vue项目,其中模拟数据由于webpack版本变化,跟视频中不一致,下方博客有解决方案,其实视频里面的还能看懂,现在webpack的服务都在插件包里了,好难找. 请参考:http ...
- 56.关于vue项目的seo问题
不可否定的是,vue现在火.但是在实际项目中,特别是像一下交互网站,我们不可避免会考虑到的是seo问题,这直接关系到我们网站的排名,很多人说用vue搭建的网站不能做优化,那我们真的要放弃vue,放弃前 ...
- webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建
webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器 ...
- JS数组方法汇总 array数组元素的添加和删除
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...
- vue项目的mode:history模式
最近做的Vue + Vue-Router + Webpack +minitUI项目碰到的问题,在此记录一下,Vue-router 中有hash模式和history模式,vue的路由默认是hash模式, ...
随机推荐
- chrome中自动回填表单解决
input添加属性autocomplete="new-password"
- AM335X用RGB888连接LCD如何以16位色彩模式显示图片
在AM335x中,在连接显示屏的时候,存在一个问题.这个在am335x Sillicon Errata已经提到过 在RGB888模式中 而对于RGB565模式的硬件连接 不难看出,这个RGB是反的 ...
- vue中使用base64进行加解密
vue进行Base64加解密 背景 项目中需要对特殊字符进行处理,避免json和数据库的特殊字符(""等)冲突,刚好学了信息安全,干脆整个加解密,wkk.. 使用步骤 打开dos, ...
- Gym-101615D Rainbow Roads 树的DFS序 差分数组
题目链接:https://cn.vjudge.net/problem/Gym-101615D 题意 给一棵树,每个边权表示一种颜色. 现定义一条彩虹路是每个颜色不相邻的路. 一个好点是所有从该节点开始 ...
- JavaScript CSS 实现简单的 TAB 标签切换
使用CSS隐藏所有tab页,然后使用JavaScript给选中的元素对应ID的tab页设置class="active"类来显示该元素,以此实现tab切换. 如鼠标放置到shwww时 ...
- FansUnion:共同写博客计划终究还是“流产”了
首先说说我原本的计划:我和周围的同学.朋友.好友 共同维护一个博客. 我对其他人并没有过高的期待.我一个人的写作量 = 其他人的写作量. 现实是,其他人没有怎么写. 对于,这个结果,我非常低无奈.谩骂 ...
- 02023_Arrays类的方法练习
1.定义一个方法,接收一个数组,数组中存储10个学生考试分数,该方法要求返回考试分数最低的后三名考试分数. public static int[] method(double[] arr){ Arra ...
- 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) A】Packets
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 多重背包的二进制优化. 就是将数量x分成接近log2x份 然后这log2x份能组合成1..x内的所有数字. 从而将多重背包转化成01 ...
- nodejs-基础大杂烩(待整理)
优点:安装简易,能自动配置环境变量 缺点:更新和更换版本需重新安装(这个可以用包管理器解决,不是问题) 高手推荐使用开源的NVM包管理器来更新和安装node,可能这个包在linux平台上比较好用吧 g ...
- tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空
最近发现,很多网友喜欢把tomcat的work目录里的东西叫做缓存,其实那不是很恰当,work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录,这也正是为什么它 ...