JavaScript常用工具函数汇总(浏览器环境)


Posted in Javascript onSeptember 17, 2020

前端业务中比较常用的JavaScript工具函数,浏览器环境常用,可直接拷贝在项目里使用。这里统一整理,方便查阅,本文章会持续更新。

一、file转为base64

/**
 * file转为base64
 * @param {*} file file对象
 * @param {*} callback 
 */
export const fileToDataURL = (file, callback) => {
 let freader = new FileReader();
 freader.readAsDataURL(file);
 freader.onload = function (e) { callback(e.target.result); }
}

二、blob流转换为base64

/**
 * blob流转换为base64
 * @param {*} blob blob对象
 * @param {*} callback 
 */
export const blobToDataURL = (blob, callback) => {
 let freader = new FileReader();
 freader.readAsDataURL(blob);
 freader.onload = function (e) { callback(e.target.result); }
}

三、base64转换为blob

/**
 * base64转换为blob
 * @param {*} dataurl base64
 */
export const dataURLtoBlob = (dataurl) => {
 let arr = dataurl.split(','),
  mime = arr[0].match(/:(.*?);/)[1],
  bstr = atob(arr[1]),
  n = bstr.length,
  u8arr = new Uint8Array(n);
 while (n--) {
  u8arr[n] = bstr.charCodeAt(n);
 }
 return new Blob([u8arr], { type: mime });
}

四、base64转换为file,IE低版本不兼容

/**
 * 将base64转换为file,IE低版本不兼容
 * @param {*} dataurl base64
 * @param {*} filename 文件名
 */
export const dataURLtoFile = (dataurl, filename) => {
 let arr = dataurl.split(','),
  mime = arr[0].match(/:(.*?);/)[1],
  bstr = atob(arr[1]),
  n = bstr.length,
  u8arr = new Uint8Array(n);
 while (n--) {
  u8arr[n] = bstr.charCodeAt(n);
 }
 return new File([u8arr], filename, { type: mime });
}

五、图片url转化成base64

/**
 * 图片url转化成base64
 * @param {*} url 图片url
 * @param {*} callback 
 * @param {*} outputFormat 图片格式
 */
export const imgUrlToDataURL = (url, callback, outputFormat) => {
  let canvas = document.createElement('canvas'),
    ctx = canvas.getContext('2d'),
    img = new Image;
  img.crossOrigin = 'Anonymous';
  img.src = url + "?timeStamp=" + new Date().getTime();
  img.onload = function () {
    canvas.height = img.height;
    canvas.width = img.width;
    // ctx.drawImage(img, 0, 0);
    ctx.drawImage(this, 0, 0, img.width, img.height);
    let dataURL = canvas.toDataURL(outputFormat || 'image/png');
    // callback.call(this, dataURL);
    callback && callback(dataURL)
    canvas = null;
  };
}

六、获取窗口尺寸

export function getViewportSize() {
 let w = 0;
 let h = 0;
 if (window.innerWidth) {
  w = window.innerWidth
  h = window.innerHeight
 } else if (document.body && document.body.clientWidth) {
  w = document.body.clientWidth
  h = document.body.clientHeight
 } else if (document.documentElement && document.documentElement.clientWidth) {
  w = document.documentElement.clientWidth
  h = document.documentElement.clientHeight
 }
 return { w, h }
}

七、浏览器环境检测

const ua = window.navigator.userAgent.toLowerCase()

// 是否微信
export const isWx = () => ua.match(/MicroMessenger/i) == 'micromessenger'

// 是否ipad
export const isIpad = () => ua.indexOf('ipad') > -1

// 是否iphone
export const isIphone = () => ua.indexOf('iphone os') > -1

// 是否uc
export const isUc = () => ua.indexOf('ucweb') > -1

// 是否windows pc
export const isWindows = () => ua.indexOf('windows') > -1

// 是否android
export const isAndroid = () => ua.indexOf('android') > -1 || ua.indexOf('adr') > -1

// 是否ios
export const isIos = () => /(iphone|ipod|ipad|ios)/i.test(ua)

// 是否qq浏览器
export const isQq = () => ua.indexOf('mqqbrowser') > -1 && ua.indexOf(' qq') < 0

// 是否qq内置浏览器
export const isQQInstalled = () => ua.indexOf(' qq') > -1 && ua.indexOf('mqqbrowser') < 0

八、开启与关闭全屏

// 开启全屏
export function launchFullscreen(element) {
 element = element || document.documentElement
 if (element.requestFullscreen) {
  element.requestFullscreen()
 } else if (element.mozRequestFullScreen) {
  element.mozRequestFullScreen()
 } else if (element.msRequestFullscreen) {
  element.msRequestFullscreen()
 } else if (element.webkitRequestFullscreen) {
  element.webkitRequestFullScreen()
 }
}

// 关闭全屏
export function exitFullscreen() {
 if (document.exitFullscreen) {
  document.exitFullscreen()
 } else if (document.msExitFullscreen) {
  document.msExitFullscreen()
 } else if (document.mozCancelFullScreen) {
  document.mozCancelFullScreen()
 } else if (document.webkitExitFullscreen) {
  document.webkitExitFullscreen()
 }
}

九、返回顶部/指定位置,实现滚动动画

/**
 * @param {*} number 距离页面顶部的距离
 * @param {*} time 滚动所需时间 单位ms
 */
const scrolling = (number = 0, time) => {
  if (!time) {
    document.body.scrollTop = document.documentElement.scrollTop = number;
    return number;
  }
  // 设置循环的间隔时间 值越小消耗性能越高
  const spacingTime = 20;
  // 计算循环的次数
  let spacingInex = time / spacingTime; 
  // 获取当前滚动条位置
  let nowTop = document.body.scrollTop + document.documentElement.scrollTop; 
  // 计算每次滑动的距离
  let everTop = (number - nowTop) / spacingInex;

  let scrollTimer = setInterval(() => {
    if (spacingInex > 0) {
      spacingInex--;
      ScrollTop(nowTop += everTop);
    } else {
      clearInterval(scrollTimer); // 清除计时器
    }
  }, spacingTime);
};

// 滚动到距离页面顶部500px的位置 动画时间为300ms
// scrolling(500, 300);

十、实现锚点滚动

// 运用了H5的scrollIntoView方法,这是一个实验中的功能,IE 8以下、Safari 6以下、Safari on iOS 5以下不兼容
const scrollToAnchor = (anchorName) => {
  if (anchorName) {
    // 找到锚点
    let anchorElement = document.getElementById(anchorName);
    // 如果对应id的锚点存在,就跳转到锚点
    if (anchorElement) {
      anchorElement.scrollIntoView({
        behavior: 'auto', // 定义动画过渡效果, "auto"或 "smooth" 之一。默认为 "auto"
        block: 'start', // 定义垂直方向的对齐, "start", "center", "end", 或 "nearest"之一。默认为 "start"
        inline: 'nearest', // 定义水平方向的对齐, "start", "center", "end", 或 "nearest"之一。默认为 "nearest"
      });
    }
  }
}

以上就是JavaScript常用工具函数汇总(浏览器环境)的详细内容,更多关于JavaScript 工具函数的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
锋利的jQuery 要点归纳(一) jQuery选择器
Mar 21 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
jQuery学习笔记之创建DOM元素
Jan 19 Javascript
全面解析Bootstrap弹窗的实现方法
Dec 01 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
Aug 02 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
Sep 21 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
node获取客户端ip功能简单示例
Aug 24 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
JavaScript中如何调用Java方法
Sep 16 #Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 #Javascript
Vue父子组件传值的一些坑
Sep 16 #Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 #Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 #Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 #Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 #Javascript
You might like
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP 函数语法介绍一
2009/06/14 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实现在windows下操作word的方法
2015/04/28 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
党委工作总结2015
2015/04/27 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书