js 常用函数

解决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('&#10052;'),
				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))

正则表达式中

  1. y+的意思是:匹配1个到多个y
  2. (y+)的意思是:y+匹配到的内容可能通过分组来取到
  3. RegExp.$1就是取到的y+匹配到的内容(‘yyyy’)
  4. this.getFullYear() + ‘’ 转化为字符串
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值