分享一些常用的JS方法

住儿
• 阅读 330

分享一些常用的JS方法

1、Copy URL地址

方式一

/**
 * @description 拷贝地址
 * @param {string} url 地址
 **/
export const copyUrl = (url, type = 1) => {
    if (type == 1) {
        navigator.clipboard
            .writeText(url)
            .then(() => {
                console.log("复制成功");
            })
            .catch(err => {
                console.log("复制失败", err);
            });
        return;
    }
};

方式二

/**
 * @description 拷贝地址
 * @param {string} url 地址
 **/
export const copyUrl = (url) => {
        let input = document.createElement("input");
        input.value = url;
        document.body.appendChild(input);
        input.select();
        document.execCommand("copy");
        document.body.removeChild(input);
};

2、处理文件大小展示

/**
 * @description 计算文件大小
 * @param {number} fileSize 文件大小
 * @return {string} 计算后的文件大小值
 **/
export const name = (fileSize = 0) => {
    if (!fileSize) return null;
    let size = 0,
        unit = "";
    if (fileSize > 1073741824) {
        size = (fileSize / 1073741824).toFixed(4) * 1;
        unit = "GB";
    } else if (fileSize > 1048576) {
        size = (fileSize / 1048576).toFixed(4) * 1;
        unit = "MB";
    } else if (fileSize > 1024) {
        size = (fileSize / 1024).toFixed(4) * 1;
        unit = "KB";
    } else {
        size = fileSize;
        unit = "B";
    }
    return size + unit;
};

3、获取音频/视频时长

/**
 * @description 获取音/视频时长
 * @param {string/object} file 文件地址/对象
 * @return {number} 媒体文件时长
 **/
export const getMediaDuration = file => {
    return new Promise(resolve => {
        // 是否是文件对象
        let hasFile = file instanceof File;
        let fileUrl = hasFile ? URL.createObjectURL(file) : file;
        // 创建对象
        let audioElement = new Audio(fileUrl);
        // 监听对象
        audioElement.addEventListener("loadedmetadata", () => {
            let time = Math.floor(audioElement.duration) || 0;
            resolve(time);
        });
        // 加载失败
        audioElement.addEventListener("error", () => {
            resolve(0);
        });
    });
};

4、下载文件

/**
 * @description 下载文件
 * @param {string} fileUrl 文件链接地址
 **/
export const downloadFile = fileUrl => {
    const iframe = document.createElement("iframe");
    // 防止影响页面布局
    iframe.style.display = "none";
    iframe.style.height = 0;
    iframe.src = fileUrl;
    document.body.appendChild(iframe);
    // 加载完成后移除创建的标签
    iframe.onload = function () {
        document.body.removeChild(iframe);
    };
};

5、对象数组去重

/**
 * @description 对象数组去重
 * @param {Array} list 数组
 * @param {String} key 唯一键
 * @return {Array} 去重后的数组
 **/
export const arrayDeduplication = (list, key) => {
    return list.filter((item, index, self) => {
        return self.findIndex(el => el[key] === item[key]) === index;
    });
};

6、获取地址栏参数

方式一

/**
 * @description 获取地址栏参数
 * @param {string} key 参数名
 * @return {string} 参数值
 **/
export const queryParams = key => {
    if (!key) return null;
    let url = new URL(location.href);
    let value = url.searchParams.get(key);
    return value;
};

方式二

/**
 * @description 获取地址栏参数
 * @param {String} key 要取值的参数
 * @return {String} 获取的值
 *  */
export const getQueryString = name => {
    let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    let r = window.location.search.substring(1).match(reg);
    if (r != null) return decodeURI(r[2]);
    return null;
};

7、params参数处理

/**
 * @description 参数处理
 * @param {Object} params  参数
 */
export const tansParams = params => {
    let result = "";
    for (const propName of Object.keys(params)) {
        const value = params[propName];
        var part = encodeURIComponent(propName) + "=";
        if (value !== null && value !== "" && typeof value !== "undefined") {
            if (typeof value === "object") {
                for (const key of Object.keys(value)) {
                    if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") {
                        let params = propName + "[" + key + "]";
                        var subPart = encodeURIComponent(params) + "=";
                        result += subPart + encodeURIComponent(value[key]) + "&";
                    }
                }
            } else {
                result += part + encodeURIComponent(value) + "&";
            }
        }
    }
    return result;
};
点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
2年前
总结100+前端优质库,让你成为前端百事通
❝1年多时间,陆陆续续整理了一些常用且实用的开源项目,方便大家更高效的学习和工作.❞js相关库js常用工具类「lodash」一个一致性、模块化、高性能的JavaScript实用工具库。「xijs」一款面向复杂业务场景的javascript工具库「ramda」一个很重要的库,提供了许多有用的方法,每个JavaScript程序员都应该掌握
Wesley13 Wesley13
3年前
java抓取Https协议url地址的源码的方法
阅读本文之前,请先阅读下文,通过下文将获取到keystore文件:http://www.oschina.net/code/snippet\_273576\_18919(http://www.oschina.net/code/snippet_273576_18919)在此,感谢一下stevenliu(http://my.oschina.net/
Stella981 Stella981
3年前
Html5添加三联切换仿3D效果旋转木马jQuery插件教程
一、使用方法<script type"text/javascript" src"js/jquery.min.js"</script<script type"text/javascript" src"js/gallery.js"</script   二、Html结构<div id"wrapper"<div id"mai
Stella981 Stella981
3年前
JavaScript中遍历数组和对象的方法
js数组遍历和对象遍历针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等JS数组遍历:1,普通for循环,经常用的数组遍历vararr1,2,0,3,9,10,20,
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Highcharts的常用属性及导出SVG
做了好几个项目都用到了Highcharts,好用自然不用多说,这里总结一下每次作图经常用的一些配置,方便以后查看。引入Highcharts非常简单,只需引入对应的js,页面中写入存放表格的div,js中对表格加以配置。配置说明下面是Highcharts官方的基础柱状图的实例配置,我将加入常用的配置并加以说明。想直接体验的朋友可以访问这个地址
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Stella981 Stella981
3年前
JavaScript 常用功能总结
编吐血整理加上翻译,太辛苦了~求赞!本文主要总结了JavaScript常用功能总结,如一些常用的额JS对象,基本数据结构,功能函数等,还有一些常用的设计模式。目录:众所周知,JavaScript是动态的面向对象的编程语言,能够实现以下效果:1\.丰富Web网页功能2\.丰富Web界面3\.实现本地或远程存储。4\.实
Stella981 Stella981
3年前
Masuit.Tools,一个免费的轮子
开源地址:https://gitee.com/masuit/Masuit.Tools包含一些常用的操作类,大都是静态类,加密解密,反射操作,动态编译,权重随机筛选算法,简繁转换,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,实体映
住儿
住儿
Lv1
明月却多情,随人处处行。
文章
3
粉丝
3
获赞
5