JavaScript工具庫MyTools詳解
阿新 • • 發佈:2020-01-09
本文例項為大家分享了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);
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。