JavaScript工具庫MyTools詳解
本文實(shí)例為大家分享了JavaScript工具庫MyTools,不斷填充中,供大家參考,具體內(nèi)容如下
MyTools.js
將功能綁定在window中,調(diào)用的時(shí)候,直接使用myToos.xxx就可以進(jìn)行函數(shù)調(diào)用。
(function (w) {
w.myTool = {
/**
* 根據(jù)id獲取元素節(jié)點(diǎn)
* @param {string}id 節(jié)點(diǎn)id
* @returns {any} id為id的節(jié)點(diǎn)
*/
$: function (id) {
return typeof id === 'string' ? document.getElementById(id) : null;
},
/**
* 返回網(wǎng)頁被卷去的高、網(wǎng)頁被卷去的左
* @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
}
},
/**
* 返回當(dāng)前界面寬度和高度
* @returns {{width: *, height: *}} width:當(dāng)前界面寬度 height:當(dāng)前界面高度
*/
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, '');
},
/**
* 對(duì)設(shè)置和移除obj元素的cs類進(jìn)行切換:
* @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 元素節(jié)點(diǎn)
*/
hide: function (ele) {
ele.style.display = 'none'
},
show: function (ele) {
ele.style.display = 'block'
},
/**
* 獲得某個(gè)元素的某個(gè)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];
}
},
/**
* 更改某個(gè)元素的某個(gè)CSS屬性
* @param {Element}eleObj
* @param {string}attr
* @param {string | number}value
*/
setCssAttr: function (eleObj, attr, value) {
eleObj.style[attr] = value;
},
/**
* 緩動(dòng)動(dòng)畫函數(shù)
* @param eleObj 要執(zhí)行緩動(dòng)動(dòng)畫的元素對(duì)象
* @param json 以JSON格式傳入需要改的屬性
* @param fn 回調(diào)函數(shù)
*/
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);
},
/**
* 傳入總秒數(shù)返回對(duì)應(yīng)小時(shí)、分鐘以及秒數(shù)
* @param second 總秒數(shù)
* @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)
}
},
/**
* 傳入一個(gè)數(shù)字,如果是一位數(shù)字,前面補(bǔ)0.如果是兩位,返回原值。
* @param {number}num
* @returns {number}
*/
addZero: function (num) {
return num < 10 ? '0' + num : num;
},
/**
* 獲取字符串真實(shí)長度,目前僅針對(duì)中文和英文字符串
* @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);
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
當(dāng)鼠標(biāo)滑過文本框自動(dòng)選中輸入框內(nèi)容的JS代碼分享
這篇文章主要介紹了當(dāng)鼠標(biāo)滑過文本框自動(dòng)選中輸入框內(nèi)容的JS代碼,有需要的朋友可以參考一下2013-11-11
JavaScript實(shí)現(xiàn)獲得所有兄弟節(jié)點(diǎn)的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)獲得所有兄弟節(jié)點(diǎn)的方法,實(shí)例分析了javascript節(jié)點(diǎn)遍歷的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
javascript和php使用ajax通信傳遞JSON的實(shí)例
今天小編就為大家分享一篇javascript和php使用ajax通信傳遞JSON的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
js操作數(shù)據(jù)庫實(shí)現(xiàn)注冊(cè)和登陸的簡單實(shí)例
下面小編就為大家?guī)硪黄猨s操作數(shù)據(jù)庫實(shí)現(xiàn)注冊(cè)和登陸的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05
uniapp微信小程序訂閱消息發(fā)送服務(wù)通知超詳細(xì)教程
在使用或開發(fā)小程序過程中,我們會(huì)發(fā)現(xiàn)消息通知是非常重要的一個(gè)環(huán)節(jié),下面這篇文章主要給大家介紹了關(guān)于uniapp微信小程序訂閱消息發(fā)送服務(wù)通知的相關(guān)資料,需要的朋友可以參考下2023-06-06
基于JavaScript實(shí)現(xiàn)十五拼圖代碼實(shí)例
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)十五拼圖代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
使用swiper自定義分頁點(diǎn)擊跳轉(zhuǎn)指定頁面
這篇文章主要介紹了使用swiper自定義分頁點(diǎn)擊跳轉(zhuǎn)指定頁面方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

