解决0.1+0.2不等于0.3的小数累加精度问题
//
formatFloat(num1, num2) {
let baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
获取URL参数
function getQuery (pa) {
var url = window.location.href.replace(/#+.*$/, ''),
params = url.substring(url.indexOf("?") + 1, url.length).split("&"),
param = {};
for (var i = 0; i < params.length; i++) {
var pos = params[i].indexOf('='),//查找name=value
key = params[i].substring(0, pos),
val = params[i].substring(pos + 1);//提取value
param[key] = val;
}
return (typeof(param[pa]) == "undefined") ? "" : param[pa];
}
雪花
<script>
/**
* js网页雪花效果jquery插件
*/
(function($){
$.fn.snow = function(options){
var $flake = $('<div id="snowbox" />').css({'position': 'absolute', 'top': '-50px','z-index':'100'}).html('❄'),
documentHeight = $(document).height(),
documentWidth = $(document).width(),
defaults = {
minSize : 10, //雪花的最小尺寸
maxSize : 20, //雪花的最大尺寸
newOn : 3000, //雪花出现的频率
flakeColor : "#FFFFFF"
},
options = $.extend({}, defaults, options);
var interval = setInterval( function(){
var startPositionLeft = Math.random() * documentWidth - 100,
startOpacity = 0.5 + Math.random(),
sizeFlake = options.minSize + Math.random() * options.maxSize,
endPositionTop = documentHeight - 300,
endPositionLeft = startPositionLeft - 100 + Math.random() * 230,
durationFall = documentHeight * 10 + Math.random() * 50000;
$flake.clone().appendTo('body').css({
left: startPositionLeft,
opacity: startOpacity,
'font-size': sizeFlake,
color: options.flakeColor
}).animate({
top: endPositionTop,
left: endPositionLeft,
opacity: 0.2
},durationFall,'linear',function(){
$(this).remove()
}
);
}, options.newOn);
};
})(jQuery);
$(function(){
$.fn.snow({
minSize: 5, //雪花的最小尺寸
maxSize: 40, //雪花的最大尺寸
newOn: 500 //雪花出现的频率 这个数值越小雪花越多
});
});
</script>
axios
axios.post(this.apiUrl + 'Ccbshop/is_identical', params, {
// 对 data 进行任意转换处理
transformRequest: [function (data) {
let ret = '';
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[
it]) + '&'
}
return ret
// return this.$qs.stringify(data);
}],
headers: {
"Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8',
"token": localStorage.getItem('token'),
"os": '7',
"version":'ccby1.0'
}
}).then(function (response) {
let rs = response.data;
if(rs.code == 100){
mui.toast(rs.msg);
return
}
}).catch(function(err){
})
根据滚动位置 设置顶部进度条
<div class="progress-indicator-2" id="progress" style="position: fixed; top: 100px; left: 0px; height: 3px; background-color: rgb(160, 116, 218);"></div>
(function(){
var contentH = document.getElementById('content').offsetHeight;
var clientH = document.documentElement.clientHeight
window.onscroll = function(){
var scrollTop=document.documentElement&&document.documentElement.scrollTop;
let w = (scrollTop + clientH)/contentH
document.getElementById('progress').style.width = w*100 +'%';
}
})()
加解密 存储
import CryptoJS from 'crypto-js'
/* -----------------------------加密解密------------------------------------ Start */
const ivs = 'pH!@#_7'
const keys = 'Ph201903'
// AES加密
export function encryptAES (data) { // 加密
var key = CryptoJS.enc.Utf8.parse(keys)
var iv = CryptoJS.enc.Utf8.parse(ivs)
var encrypted = CryptoJS.AES.encrypt(data, key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return encrypted.toString()
}
// AES解密
export function decryptAES (data) { // 解密
var key = CryptoJS.enc.Utf8.parse(keys)
var iv = CryptoJS.enc.Utf8.parse(ivs)
var decrypted = CryptoJS.AES.decrypt(data, key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
return decrypted.toString(CryptoJS.enc.Utf8)
}
/* -----------------------------加密解密------------------------------------ End */
/* -----------------------------localStorage------------------------------------ Start */
export function setLocalStorage (key, content) {
if (!key) return
if (typeof content !== 'string') {
content = JSON.stringify(content)
}
window.localStorage.setItem(key, encryptAES(content))
}
export function getLocalStorage (key, f) {
if (!key) return
let content = window.localStorage.getItem(key)
if (!content) return
if (f) {
return JSON.parse(decryptAES(content))
}
return decryptAES(content)
}
export function removeLocalStorage (key) {
if (!key) return
window.localStorage.removeItem(key)
}
/* -----------------------------localStorage------------------------------------ End */
时间格式转化
# moment 插件 支持多语言
/*
DESC:对Date的扩展,将 Date 转化为指定格式的String。
月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 例子:
(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
(new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
*/
window.Date.prototype.Format = function (fmt) {
var o = {
'M+': this.getMonth() + 1,
'd+': this.getDate(),
'h+': this.getHours(),
'm+': this.getMinutes(),
's+': this.getSeconds(),
'q+': Math.floor((this.getMonth() + 3) / 3),
'S': this.getMilliseconds()
}
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.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
}
Tips:
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + ‘’).substr(4 - RegExp.$1.length))
正则表达式中
- y+的意思是:匹配1个到多个y
- (y+)的意思是:y+匹配到的内容可能通过分组来取到
- RegExp.$1就是取到的y+匹配到的内容(‘yyyy’)
- this.getFullYear() + ‘’ 转化为字符串