前端项目中公共方法汇总utils.js
目录
- 判断手机类型IOS Android
- 格式化金钱
- 金钱字符串变回数字
- 用aa替换中文 并返回
- 去除文件后缀,得到文件名称(不带后缀)
- 获取浏览器类型(名称)
- post方式下载文件流
- 动态设置img的大小
- 获取页面参数
- 判断是否为微信
- css方式控制元素无法点击
- 简单封装localStorage setItem getItem
1.判断手机类型IOS Android
因为判断是否为Android个别手机会有问题,所以判断是否为IOS,其余的为Android
//判断是不是IOS
function isIOS() {
let u = navigator.userAgent
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) //IOS终端
return isIOS
}
2.格式化金钱
数字转成带逗号的金钱字符串
//格式化金钱
function toMoney(val) { //val 数字number
var str = (val / 100 * 100).toFixed(2) + ''
var intSum = str.substring(0, str.indexOf(".")).replace(/\B(?=(?:\d{3})+$)/g, ',') //取到整数部分
var dot = str.substring(str.length, str.indexOf(".")) //取到小数部分搜索
var ret = intSum + dot
return ret
}
3.金钱字符串变回数字
带逗号的金钱字符串转成数字number
//金钱变回数字number
function moneyStrToNum(str) { //str 金钱字符串
if (str) {
let strTemp = str.replace(",", "")
return Number(strTemp)
} else {
return str
}
}
4.用aa替换中文 并返回
因为中文算2个字符,计算字符长度之前,先用aa替换汉字,再计算value长度
function wordLengthTrans(value) {
return value ? value.replace(/[\u4e00-\u9fa5|,|。]/g, 'aa') : ""
}
5.网站与域名(不带后缀)
传入完整文件名
function getFileNameStr(name) { //name 完整文件名
let dotIndex = name.lastIndexOf(".")
let nameStr = name.slice(0, dotIndex)
return nameStr
}
6.获取浏览器类型(名称)
这里面的判断顺序不能变
function getBrowserType() {
let str = window.navigator.userAgent
let name
if (str.indexOf("Opera") > -1 || str.indexOf("OPR") > -1) {
name = "Opera"
return name
}
if (str.indexOf("Edge") > -1) {
name = "Edge"
return name
}
if (str.indexOf("Firefox") > -1) {
name = "Firefox"
return name
}
if (str.indexOf("Chrome") > -1 && str.indexOf("Safari") > -1) {
name = "Chrome"
return name
}
if (str.indexOf("Chrome") === -1 && str.indexOf("Safari") > -1) {
name = "Safari"
return name
}
if ((str.indexOf("Opera") === -1 && str.indexOf("MSIE") > -1) || str.indexOf("Trident") > -1) {
name = "IE"
return name
}
}
7.post方式下载文件流
如果接口的type为post,并且返回的是文件流,想要实现下载
//ajax post 获取流,下载file文件
function downloadFilePostStream(apiStr, option) { //option为 传给后台的参数
let body = document.body || document.getElementsByTagName("body")[0]
let form = document.createElement("form")
form.className = "myDownloadForm"
form.setAttribute("action", `${globalHost}${apiStr}`) //配置
form.setAttribute("method", "post")
form.setAttribute("name", "downloadForm")
form.setAttribute("target", "_blank")
for (let key in option) {
if (option[key] !== undefined && option[key] !== null) { //form表单的形式传undefined 会被转成字符串'undefined',干脆直接不传了
let input = document.createElement("input")
input.setAttribute("name", key)
input.value = option[key]
form.appendChild(input)
}
}
body.appendChild(form)
form.submit()
setTimeout(() => {
body.removeChild(form)
}, 50)
}
8.动态设置img的大小
根据img的容器(imgBox)的宽高比,来确定img的width:'100%'(auto)等属性
注:不能给img设置初始固定宽高
//根据img大小和容器的宽高比,设置img的css
function setImgCssByBox(img, num) { //img元素element, num imgBox宽高比 width/height
let imgW = img.width
let imgH = img.height
if ((imgW / imgH) > num) { //width更大
img.style.width = "100%"
img.style.height = "auto"
} else {
img.style.width = "auto"
img.style.height = "100%"
}
}
9.获取页面参数
获取url中的参数
//获取页面参数
function getPageParam() {
let url = window.location.href
let urlStr = url.split("?")[1] //?后面的部分
let option = {}
if (urlStr) {
let keyValArr = urlStr.split("&")
keyValArr.forEach(function (str, index) {
let arr = str.split("=")
let key = arr[0]
let val = arr[1]
option[key] = val
})
}
return option
}
10.判断是否为微信
//判断是否微信
function isWeixin() {
var ua = window.navigator.userAgent.toLowerCase()
return ua.match(/MicroMessenger/i) == 'micromessenger'
}
11.css方式控制元素无法点击
选择器和设置css用了jQuery
//让按钮失效
function disableEle($ele) {
$ele.css("pointer-events", "none")
}
//让按钮有效
function ableEle($ele) {
$ele.css("pointer-events", "auto")
}
12.简单封装localStorage setItem getItem
localDB对象
浏览器存储localStorage,key用md5加密,value用base64加密
依赖npm包:md5,js-base64
import md5 from "md5"
import { Base64 } from 'js-base64'
export const localDB = {
//key md5加密 value base64加密
setItem: (keyStr, item) => {
let localStorage = window.localStorage
//key
let keyMd5 = md5(keyStr)
//value
let itemJsonStr = JSON.stringify(item)
let itemBase64 = Base64.encode(itemJsonStr)
localStorage.setItem(keyMd5, itemBase64)
},
getItem: (keyStr) => {
let localStorage = window.localStorage
let keyMd5 = md5(keyStr)
if (!localStorage.getItem(keyMd5)) {
return null
}
let itemBase64 = localStorage.getItem(keyMd5)
let itemJsonStr = Base64.decode(itemBase64)
let item = JSON.parse(itemJsonStr)
return item
},
deleteItem: (keyStr) => {
let localStorage = window.localStorage
let keyMd5 = md5(keyStr)
localStorage.removeItem(keyMd5)
}
}
前端项目中公共方法汇总utils.js的更多相关文章
- 在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在我的<FastReport报表随笔>介绍过各种FastReport的报表设计和使用,FastReport报表可以弹性的独立设计格式,并可以在Asp.net网站上.Winform端上使用, ...
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- react项目中引入了redux后js控制路由跳转方案
如果你的项目中并没有用到redux,那本文你可以忽略 问题引入 纯粹的单页面react应用中,通过this.props.history.push('/list')就可以进行路由跳转,但是加上了redu ...
- 在Vue前端项目中,附件展示的自定义组件开发
在Vue前端界面中,自定义组件很重要,也很方便,我们一般是把一些通用的界面模块进行拆分,创建自己的自定义组件,这样操作可以大大降低页面的代码量,以及提高功能模块的开发效率,本篇随笔继续介绍在Vue&a ...
- 在dotnetcore的MVC项目中,创建支持 vue.js 的最小工程模板
网上Vue模板不是最新的,我自己做了一个最新的支持 Vue.js 的最小工程模板,方便大家从 Hello world. 入门, 在 VS2017 里学习,并扩展出自己的项目. 下面是创建步骤: 1.在 ...
- 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!
擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...
- 前端项目中使用jsencrypt进行字段加密
前端项目中使用jsencrypt进行字段加密. 使用步骤:①获取公钥②实例化对象③设置公钥④将所需数据进行加密然后返回. 进行一个简单的封装如下 /** * npm install jsencrypt ...
- 在Vue&Element前端项目中,对于字典列表的显示处理
在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...
- vue 项目中命名方法
命名 命名的方法通常有以下几类: 命名法说明 1).camel命名法,形如thisIsAnApple 2).pascal命名法,形如ThisIsAnApple 3).下划线命名法,形如this_is_ ...
随机推荐
- 架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)
作者 | JackTian 微信公众号 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)备注:来自博客园 1.什么是 phpMyadmin 系统? ...
- HTML元素脱离文档流的三种方法
一.什么是文档流? 将窗体自上而下分成一行一行,并在每行中按从左至右依次排放元素,称为文档流,也称为普通流. 这个应该不难理解,HTML中全部元素都是盒模型,盒模型占用一定的空间,依次排放在HTML中 ...
- rpm 子包创建学习
rpm 在打包的时候,可以创建子包,这样可以清晰的进行软件包的拆分,以下是结合官方文档学习 的一个实践 预备条件 需要安装rpmdevtools spec 文件 内容 Name: foo Versio ...
- 【数位DP】【P2657】[SCOI2009]windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为 \(2\) 的正整数被称为windy数. windy想知道, 在 \(A\) 和 \(B\) 之间,包括 ...
- NodeJS模块和ES6模块系统语法及注意点
社区模块规范: 1.CommonJS规范 规范实现者: NodeJS 服务端 Browserify 浏览器 2.AMD规范 全称 异步模块定义 规范实现者: RequireJS 浏览器 3.CMD规范 ...
- gethostbyaddr
函数原型: #include<netdb.h> struct hostent * gethostbyaddr(const char *addr, socklen_t len, int fa ...
- 下载mqtt.fx
#下载mqtt.fxhttp://www.jensd.de/apps/mqttfx/1.7.1/
- 第10组 Beta冲刺(3/4)
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 制作剩余界面前端 展示GitHub当日代码/文档签入记录 ...
- 简单认识RTLO(Right-to-Left Override)
目录 两行代码实现字符逆序输出 做个假文件 参考 今天在群里看到的用法,RLO是一个微软的中东Unicode字符8238,或者0x202E,可以使后面的字符都变为RTL(阿拉伯语从右往左书写,对我们来 ...
- Spring配置中<bean>的id和name属性
在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享. 1.id属 ...