前端项目常用函数封装(二)

文章目录

  • 前端项目常用函数封装(一)
  • 判断两个数组是否有相同元素 返回相同元素(数组)
  • 判断hex颜色值是深色还是浅色
    • 随机生成深浅样色
  • js判断是手机端还是移动端
    • 使用UA判断
    • 使用媒体查询判断
  • fetch直接读文件内容,解决乱码问题
  • 下载文件
    • 将字符串下载保存为 txt fasta fa csv tsv等文本文件
    • 下载文件
    • 文件链接转文件流下载--主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题 还有excel下载
  • 移动端和pc端js判断手指的上滑,下滑,左滑,右滑,事件监听 和 判断鼠标滚轮向上滚动滑轮向下滚动
  • vue2、vue3全局挂载
  • js点击按钮复制文本方法

前端项目常用函数封装(一)

在这里插入图片描述

判断两个数组是否有相同元素 返回相同元素(数组)

//判断两个数组是否有相同元素
export const ishasSameElement = (arr1: string[], arr2: string[]) => {// 使用Set数据结构来存储数组的唯一元素let set1 = new Set(arr1);let set2 = new Set(arr2);// 使用Intersection方法找出两个集合的交集,如果交集不为空,那么就存在共享的元素let commonElements = new Set([...set1].filter((x) => set2.has(x)));return Array.from(commonElements);
};

如果上面看不懂话的就用for循环遍历吧
在这里插入图片描述

判断hex颜色值是深色还是浅色

注意这里一定要是128,不要写0.5,仔细看看下面的公式,就不会相信0.5了, 1*0.5=0.5了,哈哈哈

export const hexIsDark = (hex: string) => {// 将Hex颜色转换为RGB颜色let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);let rgb = result? {r: parseInt(result[1], 16),g: parseInt(result[2], 16),b: parseInt(result[3], 16),}: null;let brightness: number = 0;if (rgb) brightness = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;return brightness < 128;
};

随机生成深浅样色

const randomColor = () => {let deepColor = [];let lightColor = [];for (let i = 0; i < 100; i++) {let color = '#' + parseInt(Math.random() * 0xffffff).toString(16);if (hexIsDark(color)) {deepColor.push(color);} else {lightColor.push(color);}}console.log('deepColor', deepColor);console.log('lightColor', lightColor);};

js判断是手机端还是移动端

推荐使用UA去判断

使用UA判断

UA(UserAgent)是指HTTP请求头中的一部分,用于标识客户端的一些信息,比如用户的设备类型、浏览器型号等等。因此,我们可以通过判断UA中的关键字来确定页面访问者的设备类型。下面是实现的代码:

      const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);if (isMobile) {console.log('当前在手机端');} else {console.log('当前在PC端');}//判断是否在微信浏览器var ua = navigator.userAgent.toLowerCase();var isWeixin = ua.indexOf("micromessenger") != -1;if (isWeixin) { // 微信浏览器}else{ //普通浏览器if (isMobile) {console.log('当前在手机端');} else {console.log('当前在PC端');}}

使用媒体查询判断

获取当前浏览器的屏幕宽度

  if (window.innerWidth <= 1023) {console.log('当前在手机端');} else {console.log('当前在PC端');}

fetch直接读文件内容,解决乱码问题

 fetch(‘文件路径’).then(async (r) => {const text = await r.text();console.log(text);});

下载文件

将字符串下载保存为 txt fasta fa csv tsv等文本文件

/*** 下载txt fasta fa等文本文件* @param text 文本内容* @param fileName 文件名*/
export const saveTextAsFile = (text: any, filename: string) => {const blob = new Blob([text], { type: 'text/plain' });const url = URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = filename;document.body.appendChild(a);a.click();document.body.removeChild(a);URL.revokeObjectURL(url);
};//或者  /*** 下载文件* @param url 文件路径* @param fileName 文件名称*/
import { saveAs } from 'file-saver';
//安装一下 file-saver包
export const downloadTxt = (url: string, fileName: string) => {const fileBlob = fetch(url).then((r) => r.blob())const blob = new Blob(['\uFEFF'+fileBlob ], { type: 'text/plain;charset=utf-8' });saveAs(blob, fileName);
};

下载文件

/*** 下载文件* @param content 文件内容* @param fileName 文件名称*/
export const download = (content: string, fileName: string) => {const link = document.createElement('a');link.href = encodeURI(content);link.download = fileName;document.body.appendChild(link);link.click();document.body.removeChild(link);
};

文件链接转文件流下载–主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题 还有excel下载

import { saveAs } from 'file-saver';/*** 文件链接转文件流下载--主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题 还有excel下载* @param url  :文件链接* @param fileName  :文件名;* @param type  :文件类型;* @param fn  :进度回调方法;*/export const saveFileToLink = (url: string, fileName: string) => {let xhr = new XMLHttpRequest();url = url.includes('https:') ? url.replace('https:', '') : url.replace('http:', ''); //资源路径动态获取请求的方式HTTPS或HTTPxhr.open('get', url, true);xhr.setRequestHeader('Content-Type', 'application/');xhr.setRequestHeader('If-Modified-Since', '0'); //解决缓存问题,每次请求都去请求服务器获取最新数据xhr.responseType = 'blob';xhr.onprogress = function (e) {//文件下载进度// if (fn && typeof fn == 'function') {//   fn(e); //监听文件下载进度;// }};xhr.onload = function () {if (this.status == 200) {//接受二进制文件流let blob = this.response;saveAs(blob, fileName);}};xhr.send();
};

移动端和pc端js判断手指的上滑,下滑,左滑,右滑,事件监听 和 判断鼠标滚轮向上滚动滑轮向下滚动

const scrollFunc = (e) => {e = e || window.event;let wheelDelta = e.wheelDelta ? e.wheelDelta : -e.detail * 50;if (wheelDelta > 0) {console.log(wheelDelta + '滑轮向上滚动');let dom = document.querySelector('.header-contanier');dom.style.display = 'flex';let dom2 = document.querySelector('.navNull');dom2.style.display = 'block';}if (wheelDelta < 0) {console.log(wheelDelta + '滑轮向下滚动');let dom = document.querySelector('.header-contanier');let dom2 = document.querySelector('.navNull');dom.style.display = 'none';dom2.style.display = 'none';}
};
if (document.addEventListener) {//火狐使用DOMMouseScroll绑定document.addEventListener('DOMMouseScroll', scrollFunc, false);
}
//其他浏览器直接绑定滚动事件
window.onmousewheel = document.onmousewheel = scrollFunc; //IE/Opera/Chrome// touchstart:     //手指放到屏幕上时触发
// touchmove:      //手指在屏幕上滑动式触发
// touchend:    //手指离开屏幕时触发
// touchcancel:     //系统取消touch事件的时候触发,这个好像比较少用
let startX: number = 0;
let startY: number = 0;
document.addEventListener('touchstart',(e) => {e.preventDefault();// console.log(e);startX = e.changedTouches[0].pageX;startY = e.changedTouches[0].pageY;},false,
);
// document.addEventListener(
//   'touchend',
//   (e) => {
// e.preventDefault();
//     console.log(e);
//   },
//   false,
// );
document.addEventListener('touchmove',(e) => {// e.preventDefault();let moveEndX = e.changedTouches[0].pageX;let moveEndY = e.changedTouches[0].pageY;let X = moveEndX - startX;let Y = moveEndY - startY;if (Math.abs(X) > Math.abs(Y) && X > 0) {console.log('right');} else if (Math.abs(X) > Math.abs(Y) && X < 0) {console.log('left');} else if (Math.abs(Y) > Math.abs(X) && Y > 0) {console.log('bottom');} else if (Math.abs(Y) > Math.abs(X) && Y < 0) {console.log('top');} else {alert('just touch');}},false,
);

vue2、vue3全局挂载

vue3全局挂载
推荐使用(provide/inject),不推荐使用globalProperties:最新版本的已经弃用了

main.ts中

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { store } from './store';
import ant from 'ant-design-vue';import { ObjAscend, ObjDescend } from './utils/utils';const app = createApp(App);
//在这里挂载 这里挂载的是两个函数
app.provide('ObjAscend', ObjAscend);
app.provide('ObjDescend', ObjDescend);
//不推荐这种挂载方式了,最新版本已经弃用了
app.config.globalProperties.window = window;
app.use(router).use(store).use(ant).mount('#app');

组件中

import { defineComponent, inject } from 'vue';let ObjAscend:(parm:string)=>any = inject('ObjAscend')
let ObjDescend:any = inject('ObjDescend')

vue2全局挂载
main.ts中

import Vue from 'vue'
import App from './App'
import wLoading from "@/component/w-loading.vue";
import store from './store'
import {showToastOrNavTo,scanCode
} from '@/utils/util'
Vue.prototype.$store = store;
Vue.prototype.showToastOrNavTo = showToastOrNavTo;

页面中 :直接this就好了

    mounted() {this.showToastOrNavTo()this.scanCode()}

js点击按钮复制文本方法

	//方法一:clickCopy(text) {const save = function (evn) {evn.clipboardData.setData("text/plain", text);evn.preventDefault(); // 阻止默认行为};document.addEventListener("copy", save); // 添加一个copy事件document.execCommand("copy"); // 执行copy方法this.$message({ message: "复制成功", type: "success" });}//方法二:clickCopy(code) {let oInput = document.createElement('input');oInput.value = code;document.body.appendChild(oInput);oInput.select(); // 选择对象;document.execCommand("Copy"); // 执行浏览器复制命令this.$message({ message: '复制成功', type: 'success' });oInput.remove()}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansibe的脚本---playbook剧本(1)

playbook剧本组成部分&#xff1a; 1、task 任务&#xff1a; 主要是包含要在目标主机上的操作&#xff0c;使用模块定义操作。每个任务都是模块的调用。 2、variables变量&#xff1a;存储和传递数据。变量可自定义&#xff0c;可以在playbook中定义为全局变量&#xff0c;可…

深入理解 Spring Boot:核心知识与约定大于配置原则

深入理解 Spring Boot&#xff1a;核心知识与约定大于配置原则 简单说一下为什么要有 Spring Boot&#xff1f; 因为 Spring 的缺点。 虽然 Spring 的组件代码是轻量级的&#xff0c;但它的配置却是重量级的(需要大量 XML 配置) 为了减少配置文件&#xff0c;简化开发 Spri…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志&#xff0c;难以识别其中的关键信息。因此&#xff0c;应用开发者需要一种数据打点机制&#xff0c;用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

手机数码品牌网站建设的作用是什么

手机数码产品几乎已经成为成年人必备的&#xff0c;包括手机、电脑、摄像机、键盘配件等&#xff0c;同时市场中相关企业也非常多&#xff0c;消费者可供选择的商品类型也很多样&#xff0c;而对企业来讲&#xff0c;只有不断提升品牌形象、获客拉新等才能不断提升企业地位&…

istio工作负载

目录 文章目录 目录本节实战前言1、WorkloadEntry多实例不同端口权重位置 2、WorkloadGroup关于我最后 本节实战 实战名称&#x1f6a9; 实战&#xff1a;WorkloadEntry测试-2023.12.21(测试成功) 前言 在之前的章节中我们已经多次提到了工作负载&#xff0c;在 Istio 中工作…

持续集成交付CICD:HELM 手动完成前端项目应用发布与回滚

目录 一、实验 1.环境 2.K8S master节点部署HELM3 3.K8S master节点安装git 4. Harbor镜像确认 5. HELM 手动完成前端项目应用发布与回滚 6.代码上传到GitLab 二、问题 1.Ingress中 path 的类型有何区别 2. HELM创建项目报错 一、实验 1.环境 &#xff08;1&#x…

智能优化算法应用:基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于野狗算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.野狗算法4.实验参数设定5.算法结果6.参考文献7.MA…

APP测试要点有哪些?本文已经给你梳理好了!

我们日常购物、旅游、支付等活动都离不开手机&#xff0c;由此衍生了很多APP。 比如每天使用频率非常高的微信、支付宝、微博、抖音、王者荣耀等等。 APP测试主要进行功能测试、性能测试、自动化测试、安全性测试、兼容性测试、专项测试。 01 APP测试流程 APP测试流程与web…

NLP论文阅读记录 - AAAI-23 | 01 Cogito Ergo Summ:通过语义解析图和一致性奖励对生物医学论文进行抽象总结

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1抽象概括2.2图增强摘要2.3 抽象概括的强化学习 三.本文方法COGITOERGOSUMM 框架3.1 问题陈述3.2 图表构建**事件图****AMR 图****图合并和重新连接**Model文本编码器图编码器解码器…

机器学习--线性回归

目录 监督学习算法 线性回归 损失函数 梯度下降 目标函数 更新参数 批量梯度下降 随机梯度下降 小批量梯度下降法 数据预处理 特征标准化 正弦函数特征 多项式特征的函数 数据预处理步骤 线性回归代码实现 初始化步骤 实现梯度下降优化模块 损失与预测模块 …

在Linux Docker中部署RStudio Server,实现高效远程访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装RStudio Server二. 本地访问三. Linux 安装cpolar四. 配置RStudio serv…

图像卷积操作

目录 一、互相关运算 二、卷积层 三、图像中目标的边缘检测 四、学习卷积核 五、特征映射和感受野 一、互相关运算 严格来说&#xff0c;卷积层是个错误的叫法&#xff0c;因为它所表达的运算其实是互相关运算&#xff08;cross-correlation&#xff09;&#xff0c;而不是…

软考学习五部曲

视频学知识 学习知识环节看视频看书都可以&#xff0c;书很厚一本。如果要看完的话要很多时间&#xff0c;所以我觉得还是看视频更快一点&#xff0c;而且视频还可以倍速。我看的那个视频我觉得非常不错&#xff0c;但是我看的视频b站已经下架了看不到了。其他的视频没仔细去看…

原生Android项目中引入Flutter并实现android 与 flutter 之间的通信

前提条件&#xff1a; 完成Flutter安装与环境搭建 一、原生Android项目中引入Flutter 1、在Android项目中&#xff0c;添加Flutter支持的体系结构过滤器 项目 - > app -> build.gradle ...... defaultConfig {......ndk {// Flutter支持的体系结构过滤器abiFilters a…

【笔记】Spring是什么

什么是spring&#xff1f; Spring的基础知识铺垫 IOC AOP<-Spring->容器->生态 先说你的认知&#xff0c;总-分结构 spring是一个基础的框架&#xff0c;同时提供了Bean的容器&#xff0c;用来方便装载具体的Bean对象&#xff0c;之前在使用对象的时候必须自己new&…

公章透明png图片怎么弄?一键生成透明图片

公章透明png图片可以应用于图像或照片的水印保护。通过将公章图片作为水印添加到图像上&#xff0c;可以保护图像的版权和来源&#xff0c;并防止未经授权的复制和使用&#xff0c;但是通常我们扫描到电脑上的公章图片都是有背景底色的&#xff0c;如何将图片去背景变透明呢&am…

Android Studio使用Genymotion

1. Genymotion介绍 GenyMotion速度之快令人发指&#xff0c;模拟效果堪比真机调试&#xff0c;支持绝大部分的模拟器功能&#xff0c;甚至包括语音&#xff0c;Google Now&#xff0c;支持eclipse, android studio。非常适合用来开发和演示效果。 2. Genymotion下载 Genymotio…

设计模式03结构型模式

结构型模式 参考网课:黑马程序员Java设计模式详解 博客笔记 https://zgtsky.top/ 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于…

数字生态文明:构建可持续发展的未来

数字技术的快速发展给人类社会带来了巨大的变革,同时也对生态环境产生了深远的影响。在这个背景下,数字生态文明的概念应运而生,它强调在数字时代实现经济、社会和环境的协调发展,构建可持续的未来。 一、数字生态文明的内涵 数字生态文明是指在数字经济发展过程中,遵循…

什么是逆变器电源?逆变器需要测试哪些指标?

逆变器是一种将低压直流电(12v/24v/48v)转化为220v交流电的电子设备&#xff0c;由逆变桥、控制逻辑、滤波电路组成&#xff0c;被广泛应用于电脑、洗衣机、空调、太阳能发电系统、电池储能系统、风力发电系统等。逆变器有以下特点&#xff1a; 1.转换效率高、启动快; 2.安全性…