common.js

我的common.js

// 通过id名获取元素
function my$(id) {
    return document.getElementById(id);
}

// 通过class名获取元素
function cl$(cla) {
    return document.getElementsByClassName(cla);
}

// 通过标签名获取元素
function ele$(el) {
    return document.getElementsByTagName(el);
}

// 元素绑定事件兼容处理
// function addEventListener(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;
//     }
// }

// 封装匀速动画函数--->任意一个元素移动到指定的目标位置
// @params:元素 目标位置
function animate(element, target) {
    // 先清理定时器
    clearInterval(element.timeId);
    element.timeId = setInterval(function () {
        var flag = true;
        // 1.获取元素当前的位置
        var current = element.offsetLeft;
        // 2.div每次移动多少
        var step = 10;
        // 判断往哪边移动
        step = current <= target ? step : -step;
        // 3.每次移动后得距离
        current += step;
        // 4.判断移动后的位置是否达到目标位置
        if (Math.abs(target - current) > Math.abs(step)) {
            element.style.left = current + "px";
            flag = false;
        } else {
            // 清理定时器
            clearInterval(element.timeId);
            element.style.left = target + "px";
            flag = true;
        }
    }, 5)
}

// 简化:封装获取页面向上或者向左卷曲出去的距离值
function getScroll() {
    return {
        left: window.pageXOffset || document.documentElement.scrollLeft,
        top: window.pageYOffset || document.documentElement.scrollTop
    }
}

// 封装变速动画函数--->任意一个元素移动到指定的目标位置
// @params:元素 目标位置
function animateBian(element, target) {
    // 先清理定时器
    clearInterval(element.timeId);
    element.timeId = setInterval(function () {
        var flag = true;
        // 1.获取元素当前的位置
        var current = element.offsetLeft;
        // 2.div每次移动多少
        var step = (target - current) / 10;
        // 判断步数 > 0 向上取整,否则向下取整
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        // 3.每次移动后得距离
        current += step;
        element.style.left = current + "px";
        if (current == target) {
            clearInterval(element.timeId);
        }
        // console.log("目标位置:" + target);
        // console.log("每步的距离:" + step);
        // console.log("当前位置:" + current);
    }, 10)
}

// 获取任意一个元素的任意一个样式属性值
// @params:element(元素)   attr(属性名)
function getStyle(element, attr) {
    // 判断是否支持该方法
    if (window.getComputedStyle) {
        return window.getComputedStyle(element, null)[attr];
    } else {
        return element.currentStyle[attr];
    }
}
// 设置任意一个元素的任意一个样式属性值打到任意一个目标位置
// @params:
//          element --- 元素
//          json --- 对象
//          fn --- 回调函数:函数当作参数使用
function animateStyle(element, json, fn) {
    // 先清理定时器
    clearInterval(element.timeId);
    element.timeId = setInterval(function () {
        // 开关:假设全部到达目标位置
        var flag = true;
        // 遍历的去设置目标位置
        for (var attr in json) {
            // 判断这个属性attr是不是opacity
            if (attr == "opacity") {
                // 先获取元素当前的属性值
                var current = getStyle(element, attr) * 100;// 转化为数字类型 1*100=100
                // 存储的是每一个的目标位置
                var target = json[attr] * 100;// 0.2*100=20
                // 2.变化的数值
                var step = (target - current) / 10;// -8
                // 判断步数 > 0 向上取整,否则向下取整
                step = step > 0 ? Math.ceil(step) : Math.floor(step);// -8
                // 3.移动后元素当前的属性值
                current += step;// 92
                // 给元素设置对应属性值
                element.style[attr] = current / 100;// 92 / 100
            } else if (attr == "zIndex") {
                // 直接改变这个属性的值
                element.style[attr] = json[attr];
            } else {
                // 先获取元素当前的属性值
                var current = parseInt(getStyle(element, attr));// 转化为数字类型
                // 存储的是每一个的目标位置
                var target = json[attr];
                // 2.变化的数值
                var step = (target - current) / 10;
                // 判断步数 > 0 向上取整,否则向下取整
                step = step > 0 ? Math.ceil(step) : Math.floor(step);
                // 3.移动后元素当前的属性值
                current += step;
                element.style[attr] = current + "px";
            }
            // 某一个的当前属性 == 目标属性,条件成立
            // 问题:只判断一个属性达到目标位置就会清理定时器
            // if (current == target) {
            //     clearInterval(element.timeId);
            // }
            // 判断有一个没有达到目标位置,立马让flag = false;
            if (current != target) {
                flag = false;
            }
        }
        if (flag) {
            // 清理定时器
            clearInterval(element.timeId);
            // 判断用户有没有传fn函数
            if (fn) {
                fn();
            }
        }
    }, 20)
}

// 希望图片跟着鼠标飞,可以在任何的浏览器实现
// 1.window.event和事件对象event的兼容
// 2.clientX和clientY的单独使用,在IE8中需要用window.event.clientX
// 3.scrollTop和scrollLeft的兼容
// 4.pageX/pageY和clientX+scrollLeft/clientY+scrollTop的兼容
var evt = {
    // 1.window.event和事件对象event的兼容
    getEvent: function (e) {
        return window.event || e;
    },
    // 2.clientX和clientY的单独使用,在IE8中需要用window.event.clientX
    // 可视区域的横坐标:Google--->e.clientX   IE8--->window.event.clientX
    getClientX: function (e) {
        return this.getEvent(e).clientX;
    },
    getClientY: function (e) {
        return this.getEvent(e).clientY;
    },
    // 3.scrollTop和scrollLeft的兼容
    // 页面向左卷曲出去的横坐标
    getScrollLeft: function () {
        return window.pageXOffset || document.documentElement.scrollLeft;
    },
    // 页面向上卷曲出去的纵坐标
    getScrollTop: function () {
        return window.pageYOffset || document.documentElement.scrollTop;
    },
    // 4.pageX/pageY和clientX+scrollLeft/clientY+scrollTop的兼容
    // 基于页面的横坐标
    pageX: function (e) {
        return this.getEvent(e).pageX ? this.getEvent(e).pageX : this.getEvent(e) + this.getScrollLeft();
    },
    // 基于页面的纵坐标
    pageY: function (e) {
        return this.getEvent(e).pageY ? this.getEvent(e).pageY : this.getEvent(e) + this.getScrollTop();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在web开发中,JavaScript是一种常用的客户端脚本语言。而common.js则是一种用于node.js的模块系统,用于管理JavaScript应用的依赖关系。 当我们在开发node.js项目时,经常会使用到各种各样的库和框架。为了更好地管理应用的依赖关系,我们需要使用common.js模块系统。 common.js模块系统通过提供require函数,使得我们可以方便地引入其他模块的代码。在引入其他模块时,我们可以指定相对路径或者是模块名。 同时,common.js还提供了exports对象,允许我们将模块的部分代码暴露给外部使用。通过这种方式,我们可以实现JavaScript代码的模块化,提高代码的复用性和可维护性。 当我们需要使用common.js模块系统时,通常需要下载和引入common.js库。常见的方式是通过npm安装common.js库,或者是直接下载common.jsjs文件。 总之,common.js模块系统是非常重要的一种工具,可以帮助我们更好地管理JavaScript应用的依赖关系,提高代码的可维护性和复用性。 ### 回答2: Common.js是一种用于Javascript编程的模块化系统。它允许开发人员将Javascript代码划分成不同的模块,从而使代码更加易于维护和重用。 Common.js提供了一个标准化的接口,使得模块可以被其他模块所调用。它通过使用require和module.exports关键字,使得模块之间的依赖关系得以明确定义。 要下载Common.js,可以在浏览器中搜索“Common.js下载”,可以找到一些在Github上的链接,如Common.js和Browserify。这些链接提供了Common.js的源代码和文档,以及一个命令行界面,用来构建和管理应用程序中的模块依赖关系。 除了通过Github下载Common.js外,大多数现代浏览器都已经内置了Common.js的支持。因此,在使用Common.js时,开发人员可以直接使用内置的支持,而无需单独下载框架。 总之,Common.js是一种非常有用的模块化系统,它可以帮助开发人员更加高效地组织和管理Javascript代码。无论是通过Github下载源代码,还是通过内置支持,Common.js都是制作高质量Javascript应用程序的有力工具。 ### 回答3: common.js 是 Node.js 中常用的模块系统,也能在浏览器中使用。它提供了模块化开发的标准,使开发人员可以将代码分割成多个模块,并独立地引入和使用,增强了代码的可维护性和可重用性。 在浏览器中使用 common.js,需要先将模块打包成一个文件,然后使用 script 标签引入。通常使用打包工具如 Webpack 或 Browserify,将所有依赖的模块打包成一个单独的文件,如 bundle.js。在 HTML 文件中引入这个文件即可使用其中的模块。 下载 common.js 可以通过多种途径,例如在 Node.js 中可以使用 npm 命令安装,或在浏览器中通过 CDN 下载。使用 npm 安装 common.js 可以在命令行中运行 npm install commonjs 命令,然后在代码中使用 require() 函数引入模块。在浏览器中,可以在 HTML 中通过 script 标签引入 CDN 中的 common.js 文件。 总之,common.js 是一个十分重要的模块系统,为前后端开发提供了一个标准,使代码更加易于维护和重用。通过合适的打包工具和下载方式,我们能够方便地使用 common.js 进行模块化开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WA终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值