JavaScript工具库MyTools详解


Posted in Javascript onJanuary 01, 2020

本文实例为大家分享了JavaScript工具库MyTools,不断填充中,供大家参考,具体内容如下

MyTools.js

将功能绑定在window中,调用的时候,直接使用myToos.xxx就可以进行函数调用。

(function (w) {
 w.myTool = {
  /**
   * 根据id获取元素节点
   * @param {string}id 节点id
   * @returns {any} id为id的节点
   */
  $: function (id) {
   return typeof id === 'string' ? document.getElementById(id) : null;
  },

  /**
   * 返回网页被卷去的高、网页被卷去的左
   * @returns {{top: *, left: *}} top:被卷去的高 left:被卷去的左
   */
  scroll: function() {
   if(window.pageYOffset !== null){ // 最新的浏览器
    return {
     "top": window.pageYOffset,
     "left": window.pageXOffset
    }
   }else if(document.compatMode === 'CSS1Compat'){ // W3C
    return {
     "top": document.documentElement.scrollTop,
     "left": document.documentElement.scrollLeft
    }
   }
   return {
    "top": document.body.scrollTop,
    "left": document.body.scrollLeft
   }
  },

  /**
   * 返回当前界面宽度和高度
   * @returns {{width: *, height: *}} width:当前界面宽度 height:当前界面高度
   */
  client: function() {
   if(window.innerWidth !== null){ // 最新的浏览器
    return {
     "width": window.innerWidth,
     "height": window.innerHeight
    }
   }else if(document.compatMode === 'CSS1Compat'){ // W3C
    return {
     "width": document.documentElement.clientWidth,
     "height": document.documentElement.clientHeight
    }
   }
   return {
    "width": document.body.clientWidth,
    "height": document.body.clientHeight
   }
  },

  /**
   * 检查obj元素是否的类名中是否有cs
   * @param {Element}obj
   * @param {string}cs
   * @returns {boolean} true有 false无
   */
  hasClassName: function (obj, cs) {
   var reg = new RegExp('\\b' + cs + '\\b');
   return reg.test(obj.className);
  },

  /**
   * 为obj添加类名cs
   * @param {Element}obj
   * @param {string}cs
   */
  addClassName: function (obj, cs) {
   if(!this.hasClassName(obj,cs)){
    obj.className += ' ' + cs;
   }
  },

  /**
   * 移除所有 obj的cs类:
   * @param {Element}obj
   * @param {string}cs
   */
  removeClassName: function (obj, cs) {
   var reg = new RegExp('\\b' + cs + '\\b');
   // 删除class
   obj.className = obj.className.replace(reg, '');
  },

  /**
   * 对设置和移除obj元素的cs类进行切换:
   * @param {Element}obj
   * @param {string}cs
   */
  toggleClassName: function (obj, cs) {
   if(this.hasClassName(obj,cs)){
    // 有, 删除
    this.removeClassName(obj,cs);
   }else {
    // 没有,则添加
    this.addClassName(obj,cs);
   }
  },

  /**
   * 控制元素是否显示
   * @param {Element}ele 元素节点
   */
  hide: function (ele) {
   ele.style.display = 'none'
  },
  show: function (ele) {
   ele.style.display = 'block'
  },

  /**
   * 获得某个元素的某个CSS属性
   * @param {Element}obj
   * @param {string}attr
   * @returns {string}
   */
  getCSSAttr: function (obj, attr) {
   if (obj.currentStyle) { // IE 和 opera
    return obj.currentStyle[attr];
   } else {
    return window.getComputedStyle(obj, null)[attr];
   }
  },

  /**
   * 更改某个元素的某个CSS属性
   * @param {Element}eleObj
   * @param {string}attr
   * @param {string | number}value
   */
  setCssAttr: function (eleObj, attr, value) {
   eleObj.style[attr] = value;
  },

  /**
   * 缓动动画函数
   * @param eleObj 要执行缓动动画的元素对象
   * @param json 以JSON格式传入需要改的属性
   * @param fn 回调函数
   */
  slowMoving: function (eleObj, json, fn) {
   clearInterval(eleObj.timer);
   var speed = 0, begin = 0, target = 0, flag = false;
   eleObj.timer = setInterval(function () {
    flag = true;
    for(var key in json){
     if (json.hasOwnProperty(key)){
      if (key === 'opacity') {
       begin = parseInt(parseFloat(myTool.getCSSAttr(eleObj, key)) * 100);
       target = parseInt(json[key] * 100);
      } else if ('scrollTop' === key) {
       begin = Math.ceil(Number(eleObj.scrollTop));
       target = parseInt(json[key]);
      } else {
       begin = parseInt(myTool.getCSSAttr(eleObj, key)) || 0;
       target = parseInt(json[key]);
      }
      speed = (target - begin) * 0.2;
      speed = (target > begin) ? Math.ceil(speed) : Math.floor(speed);
      if (key === 'opacity') {
       eleObj.style.opacity = (begin + speed) / 100;
      } else if ('scrollTop' === key) {
       eleObj.scrollTop = begin + speed;
      } else if ("zIndex" === key) {
       eleObj.style[key] = json[key];
      }else {
       eleObj.style[key] = begin + speed + 'px';
      }
      if (begin !== target) {
       flag = false;
      }
     }
    }
    if(flag){
     clearInterval(eleObj.timer);
     fn && fn();
    }
   }, 100);
  },

  /**
   * 传入总秒数返回对应小时、分钟以及秒数
   * @param second 总秒数
   * @returns {{min: number , hour: number, second: number}}
   */
  secondToHourMinSecond: function (second) {
   return{
    "hour" : Math.floor(second / (60*60)),
    "min" : Math.floor(second % (60*60) / 60),
    "second" : Math.floor(second %60)
   }
  },

  /**
   * 传入一个数字,如果是一位数字,前面补0.如果是两位,返回原值。
   * @param {number}num
   * @returns {number}
   */
  addZero: function (num) {
   return num < 10 ? '0' + num : num;
  },

  /**
   * 获取字符串真实长度,目前仅针对中文和英文字符串
   * @param {string}str
   * @returns {number}
   */
  getStrLength: function (str){
  var len = 0, code = 0;
  for (var i = 0; i < str.length; i++) {
   code = str.charCodeAt(i);
   if (code>=0 && code <= 127){
    len += 1;
   }else{
    len += 2;
   }
  }
  return len;
 }
 };
})(window);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
添加JavaScript重载函数的辅助方法2
Jul 04 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
Jan 30 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
javascript正则表达式使用replace()替换手机号的方法
Jan 19 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
JavaScript实现图片自动加载的瀑布流效果
Apr 11 Javascript
轻松掌握JavaScript中介者模式
Aug 26 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
Javascript创建类和对象详解
May 31 Javascript
vue2.0 elementUI制作面包屑导航栏
Feb 22 Javascript
js实现踩五彩块游戏
Feb 08 Javascript
javascript Canvas动态粒子连线
Jan 01 #Javascript
小程序新版订阅消息模板消息
Dec 31 #Javascript
小程序实现长按保存图片的方法
Dec 31 #Javascript
使用webpack搭建vue环境的教程详解
Dec 31 #Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 #Javascript
TypeScript之调用栈的实现
Dec 31 #Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 #Javascript
You might like
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
十天学会php(1)
2006/10/09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
php中yii框架实例用法
2020/12/22 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
打造完美自荐信
2014/01/24 职场文书
个人自我评价范文
2014/02/05 职场文书
就业协议书
2014/09/12 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
民主评议党员总结
2014/10/20 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
材料采购员岗位职责
2015/04/03 职场文书