js中的封装

js封装函数

// 获取Id
function getId(e) {
return document.getElementById(e);
}

// 获取类名的集合
function getClassName(e) {
return document.getElementsByClassName(e);
}

// 获取标签名的集合
function getTagName(e) {
return document.getElementsByTagName(e);
}

// 获取名称的集合
function getName(e) {
return document.getElementsByName(e);
}

function query(e) {
return document.querySelector(e);
}

function queryAll(e) {
return document.querySelectorAll(e);
}

function setTxt(e, text) { //解决textContent不兼容为题

if (e.textContent == undefined) {            //实行兼容性策略
    e.innerText = text;
} else {                                      //若e.textContent为false,则textContent方法可行
    e.textContent = text;
}

}

function element(e) {
e = e || window.event; //获取事件对象的兼容
}
//封装匀速动画函数
function animate(element, target) {
//先清除定时器, 再开启定时器, 防止多次绑定
clearInterval(element.timeId);

element.timeId = setInterval(function () {
    //1. 获取元素的位置
    var current = element.offsetLeft;
    //2.div每一次移到多少距离
    var step = 9;
    //优化 :
    step = current < target ? step : -step;
    //3.每一次移动后的距离
    current += step;
    //4.判断条件?
    // 思路 : 根据你的每次还需要移动的距离判断 > step , 设置left值
    //  current === 396 走的是else
    if(Math.abs(target - current) > Math.abs(step) ){
        element.style.left = current + "px";
    }else {
        //清理定时器
        clearInterval(element.timeId);
        element.style.left = target + "px";
    }
}, 5)

}

/* 变速动画封装 */
function variableAnimation(el, target) {
//清除定时器
clearInterval(el.timer);
//设置定时器
el.timer = setInterval(function () {
//1、获取当前对象相对于父级的位置
var current = el.offsetLeft;
//2、设置变速
var step = (target - current) / 11;
//3、解决step为0时,位置不变的问题
step = step > 0 ? Math.ceil(step) : Math.floor(step);
//4、更新对象当前位置
current += step;
el.style.left = current + “px”;
//5、到达指定位置,清除定时器
if (current == target) {
clearInterval(el.timer);
}
}, 20);
}

// 需求 : 设置多个任意的属性
/* 封装样式属性

@params : element 元素

      attrObj 属性对象
      fn 回调函数

*/
function speedAnimate(element,attrObj,fn) {
//先清除定时器
clearInterval(element.timeId);
element.timeId = setInterval(function () {
//优化 : 通过开关操作定时器
var flag = true;
//改 : 遍历的设置指定目标位置
for(var attr in attrObj){

      //优化 : 当前遍历的属性有没有opacity   当前透明值 : 0.2  过渡区间: 0.2-0.8 目标 : 0.8
      if(attr ==="opacity"){
          //1. 获取当前的元素属性值
          var current = getStyle(element,attr)*100; // 0.2 *100 = 20 让当前的透明度放大100倍
          //2.移动的步数 = 指定目标位置 - 当前位置 / 10
          //2.1 获取指定目标位置
          var target = attrObj[attr] * 100; //0.8 * 100 = 80
          var step = (target - current) / 10; // 6
          //3.判断步数的正负
          step = step > 0 ? Math.ceil(step) : Math.floor(step); //向上取整
          //4.移动后的元素位置
          current += step; // 20 + 6 = 26
          //5.赋值属性
          element.style[attr] = current / 100; //缩小100倍

      }else if(attr == "zIndex"){
          //说明设置的是层级, 直接赋值即可
          element.style[attr] = attrObj[attr];


      }else{
          //1. 获取当前的元素属性值  注意: 转化number类型   改!!!!!!!!!!!!!!!!!!!!!!!!!!
          var current = parseInt(getStyle(element,attr));
          //2.移动的步数 = 指定目标位置 - 当前位置 / 10
          //2.1 获取指定目标位置
          var target = attrObj[attr];
          var step = (target - current) / 10;
          //3.判断步数的正负
          step = step > 0 ? Math.ceil(step) : Math.floor(step); //向上取整
          //4.移动后的元素位置
          current += step;
          //5.赋值属性   改!!!!!!!!!!!!!!!!!!!!!!!!
          element.style[attr] = current + "px";
      }

/*

封装 : 获取任意一个元素中任意一个样式属性

@params : element dom元素

      attr  样式属性名

@return : 样式属性值

*/
function getStyle(element, attr) {
//判断是否支持该方法
return window.getComputedStyle ? window.getComputedStyle(element, null)[attr] : element.currentStyle[attr];
}

   //6. 只要有一个属性没有到达当前目标, 就让flag = false
   if(current != target){
       flag = false;
   }

}

if(flag){
clearInterval(element.timeId);
//调用用户传进来的函数 , 如果没传参, 需要先判断是否有这个fn函数, 以保证不会出错
// if(fn){
// fn();
// }
// 等价于以下写法
fn && fn();

}
// console.log(“目标位置是:” + target + ", 当前位置 : " + current + “, 每次移动的步数:” + step);
},20)
}

function getStyle(element,attr) {
//判断是否支持该方法
if (window.getComputedStyle) {
return window.getComputedStyle(element,null)[attr];
}else{
return element.currentStyle[attr];
}

}
/*
对于元素间的空格,IE9及以前版本不会返回文本节点,
而其他所有浏览器都会返回文本节点。这样导致了在使用childNodes和firstChild等属性时的行为不一致。

兼容ie8获取父元素的第一个子元素
非ie8使用firstElementChild[获得父元素下第一个子元素]
ie8时,使用firstChild[获得父节点中第一个节点,在ie8中,是获得父元素下第一个子元素]
*/
function getElementFirstChild(e) {
if (e.firstElementChild) {
return e.firstElementChild;
} else {
return e.firstChild;
}
}

function getElementLastChild(e) {
if (e.lastElementChild) {
return e.lastElementChild;
} else {
return e.lastChild;
}
}

function getElementBortherPrev(e) {
if (e.previousElementSibling) {
return e.previousElementSibling;
} else {
return e.previousSibling;
}
}

function getElementBortherNext(e) {
if (e.nextElementSibling) {
return e.nextElementSibling;
} else {
return e.nextSibling;
}
}

//封装:为任意元素, 绑定任意事件, 执行任意的处理函数
/*

@params : element, type, fn
@return :
*/
function addEvent(element, type, fn) {
//判断当前元素是否支持哪个方法
if(element.addEventListener){
element.addEventListener(type, fn, false);
}else if(element.attachEvent){
element.attachEvent(“on”+type, fn);
}else {
element[“on” + type] = fn;
}
}
//封装阻止冒泡
function stopBubble(event){

event = event || window.event;

if(event.stopPropagation){
    event.stopPropagation();
}else {
    event.cancelBubble = true;
}

}

/* 封装 : 获取浏览器向上或者向左卷曲出去的距离
*
* @params :null
* @return : object
* */

function getScroll() {
var obj = {};
obj.top = window.pageYOffset || document.documentElement.scrollTop;
obj.left = window.pageXOffset || document.documentElement.scrollLeft;
return obj;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值