JavaScript工具库MyTools详解

本文实例为大家分享了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);

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

(0)

相关推荐

  • JavaScript工具库之Lodash详解

    前言 你还在为JavaScript中的数据转换.匹配.查找等烦恼吗?一堆看似简单的foreach,却冗长无趣,可仍还在不停的repeat it!也许你已经用上了Underscore.js,不错,你已经进步很大一步了.然而今天我希望你能更进一步,利用lodash替换掉Underscore. lodash一开始是Underscore.js库的一个fork,因为和其他(Underscore.js的)贡献者意见相左.John-David Dalton的最初目标,是提供更多"一致的跨浏览器行为--,并改善

  • Chart.js 轻量级HTML5图表绘制工具库(知识整理)

    Chart.js:用不同的方式让你的数据变得可视化.每种类型的图表都有动画效果,并且看上去非常棒,即便是在retina屏幕上.基于HTML5 canvas技术,Chart.js不依赖任何外部工具库,轻量级(压缩之后仅有4.5k).值得推荐学习! GitHub源码: https://github.com/nnnick/Chart.js Chart.js文档:http://www.bootcss.com/p/chart.js/ 步骤: html部分: <canvas id="myChart&q

  • JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    主要集合了我写js时一些常用的方法,并参考了prototype.js,jquery,google,百度,有啊等框架. 工具库已经在近几个效果中使用:JavaScript 多级联动浮动菜单 (第二版)JavaScript 浮动定位提示效果 JavaScript Table行定位效果 JavaScript Table排序 这个工具库的主要特点是: [跨浏览器]能在以下浏览器使用:IE6,IE7,IE8,Firefox 3.5.3,Chrome 3.0,Safari 4.0.3,Opera 10.10

  • javascript工具库代码

    复制代码 代码如下: /* *YYJ.js 主要提供后台应用方法 *目前有Ajax.addLoadEvent.deleteAll.getByClass.$C(=getByClass).$.yyjtable.setCss.getCss.iaArray等方法.最后面还提供了一个 *可实例化的方法YYJ.tick用来计算脚本运行时间 *版本0.1    --tianyi    yyj */ var YYJ=function(){     var UniqueInstance;     function

  • Kibo 用于处理键盘事件的Javascript工具库

    入门 Kibo不依赖任何东西.你只要把它放到你的HTML代码里就行了: 复制代码 代码如下: <script type="text/javascript" src="kibo.js"></script> 下载 kibo.js 创建一个Kibo对象实例,事件监听器就建立起来了: 复制代码 代码如下: var k = new Kibo(); Kibo对象的构造器有一个可选参数--你指定的接收事件的HTML元素.可以是input, textarea

  • JavaScript工具库MyTools详解

    本文实例为大家分享了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' ?

  • Go依赖注入DI工具wire使用详解(golang常用库包)

    目录 什么是依赖注入 第一次编写mysql操作类: 第二次编写mysql操作类: 第三次编写mysql操作类: 何时使用依赖注入 wire 概念说明 provider 和 injector provider injector wire 使用 快速开始 小结 绑定接口 Provider Set 参考 google 出品的依赖注入库 wire:https://github.com/google/wire 什么是依赖注入 依赖注入 ,英文全名是 dependency injection,简写为 DI.

  • clamscan-Linux查毒工具的命令详解

    clamscan命令用于扫描文件和目录,一发现其中包含的计算机病毒,clamscan命令除了扫描linux系统的病毒外,主要扫描的还是文件中包含的windows病毒. clamscan [选项] [路径] [文件] --quiet   使用安静模式,仅仅打印出错误信息 -i  仅仅打印被感染的文件 -d<文件> 以指定的文件作为病毒库,一代替默认的/var/clamav目录下的病毒库文件 -l <文件> 指定日志文件,以代替默认的/var/log/clamav/freshclam.

  • Python中logging日志库实例详解

    logging的简单使用 用作记录日志,默认分为六种日志级别(括号为级别对应的数值) NOTSET(0) DEBUG(10) INFO(20) WARNING(30) ERROR(40) CRITICAL(50) special 在自定义日志级别时注意不要和默认的日志级别数值相同 logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO.WARNING.ERROR.CRITICAL 级别的日志都会输出. |2logging常见对象 Logger:日志,

  • Android Studio 3.6中新的视图绑定工具ViewBinding 用法详解

    前言 我们在Android开发的过程中总是需要获取XML布局中的ViewId,以便给其赋值进行显示,早期我们只能使用 findViewById 这个API,会导致很多的模版代码出现.2013年左右Android界大神 Jake Wharton开源了Butter Knife框架,通过Bind("viewid")方式方便开发者获取ViewId.近两年由于谷歌对Kotlin的支持,我们开始使用 Android Kotlin extensions. 在文件中导入布局文件直接引用viewId.无

  • C++JSON库CJsonObject详解(轻量简单好用)

    1. JSON概述 JSON: JavaScript 对象表示法( JavaScript Object Notation) .是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集.许多编程语言都很容易找到JSON 解析器和 JSON 库. JSON 文本格式在语法上与创建 JavaScript 对象的代码相同.不同语言的不同json库对json标准的支持不尽相同,为了能让尽可能多的json库都能正常解析和生成json,定义JSON的规范很重要,推荐一个JSON规范<JSON风格指南

  • python2利用wxpython生成投影界面工具的图文详解

    本投影界面工具的功能: 准备好.prj投影文件,将输入文件夹内的WGS84经纬度坐标shp文件,投影为平面文件,成果自动命名为prj_***并新建在输入文件夹同一路径下. 下一步目标: 利用pyinstaller或其他打包库生成exe文件,目前停滞在python2语法.arcpy打包出错相关问题上. 参考文献: <Using Py2exe with Arcpy- It can be done easily!> <如何使用py2exe打包arcpy脚本?> GUI界面示意图 投影文件

  • Golang标准库syscall详解(什么是系统调用)

    一.什么是系统调用 In computing, a system call is the programmatic way in which a computer program requests a service from the kernel of the operating system it is executed on. This may include hardware-related services (for example, accessing a hard disk dri

  • JavaScript之clipboard用法详解

    (1)介绍: clipboard.js是一款轻量级的实现复制文本到剪贴板功能的JavaScript插件.通过该插件可以将输入框,文本域,DIV元素中的文本等文本内容复制到剪贴板中 clipboard.js支持主流的浏览器:chrome 42+; Firefox 41+; IE 9+; opera 29+; Safari 10+; (2)clipboard复印内容的方式有 从target复印目标内容 通过function 要复印的内容 通过属性返回复印的内容 target复印目标内容,这里不说,就

  • 微信小程序 获取手机号 JavaScript解密示例代码详解

    当我们在开发微信小程序中,有一个常用的功能,就是获取用户的手机号,然后一键登入小程序,那么手机号如何获取呢?请认真看完本文,保证可以获取到用户的手机号. 刚开始开发微信小程序的时候,想着实现手机验证码登入,后来查阅资料得知,发给用户的短信是要自己付费的.后来想想,微信获取用户的手机号一样可以保证手机号码的真实性,因为手机号既然可以绑定微信,那么肯定是被严格核验过的,然后就开始了获取手机号之旅,网上教程有很多,但不知什么原因,都是会少一些内容,有的只有前端代码,没有后端:有的后端代码是PHP,不是

随机推荐