热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端开发中的重要一环:使用原生JavaScript封装jQuery库

2019独角兽企业重金招聘Python工程师标准用原生js封装jquery的实现base.js***上官清偌*前台调用var$function(_this){return

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

用原生js封装jquery的实现

base.js

/*** 上官清偌*/
// 前台调用
var $ = function (_this) {return new Base(_this);
}
//基础库
function Base(_this) {//创建一数组保存节点和数组的节点,保存为私有成员this.elements = [];//把this传进来://_this是一个对象,undefined也是一个对象if (_this != undefined) {this.elements[0] = _this;}
}Base.prototype = {//获取idgetId: function (id) {this.elements.push(document.getElementById(id));return this;},//获取所有的class节点的数组getClass: function (className, idName) {var node = null;if (arguments.length == 2) {node = document.getElementById(idName);} else {node = document;}var all = document.getElementsByTagName('*');for (var i = 0; i //获取元素节点getTagName: function (tagName) {//先获取到每所有的节点,然后在进行添加var tags = document.getElementsByTagName(tagName);for (var i = 0; i // 触发点击事件clickclick: function (fn) {for (var i = 0; i getInner().width - element.offsetWidth) {element.style.left = getInner().width - element.offsetWidth + 'px';}if (element.offsetTop > getInner().height - element.offsetHeight) {element.style.top = getInner().height - element.offsetHeight + 'px';}};}return this;}}//插件的入口部分
Base.prototype.extend=function (name,fn) {Base.prototype[name]=fn;
}/*封装常见的涵数**********************************************************/
//跨浏览器添加事件绑定//跨浏览器添加事件绑定
function addEvent(obj, type, fn) {if (typeof obj.addEventListener != 'undefined') {obj.addEventListener(type, fn, false);} else {//创建一个存放事件的哈希表(散列表)if (!obj.events) obj.events = {};//第一次执行时执行if (!obj.events[type]) {//创建一个存放事件处理函数的数组obj.events[type] = [];//把第一次的事件处理函数先储存到第一个位置上if (obj['on' + type]) obj.events[type][0] = fn;} else {//同一个注册函数进行屏蔽,不添加到计数器中if (addEvent.equal(obj.events[type], fn)) return false;}//从第二次开始我们用事件计数器来存储obj.events[type][addEvent.ID++] = fn;//执行事件处理函数obj['on' + type] = addEvent.exec;}
}//为每个事件分配一个计数器
addEvent.ID = 1;//执行事件处理函数
addEvent.exec = function (event) {var e = event || addEvent.fixEvent(window.event);var es = this.events[e.type];for (var i in es) {es[i].call(this, e);}
};//同一个注册函数进行屏蔽
addEvent.equal = function (es, fn) {for (var i in es) {if (es[i] == fn) return true;}return false;
}//把IE常用的Event对象配对到W3C中去
addEvent.fixEvent = function (event) {event.preventDefault = addEvent.fixEvent.preventDefault;event.stopPropagation = addEvent.fixEvent.stopPropagation;return event;
};//IE阻止默认行为
addEvent.fixEvent.preventDefault = function () {this.returnValue = false;
};//IE取消冒泡
addEvent.fixEvent.stopPropagation = function () {this.cancelBubble = true;
};//跨浏览器删除事件
function removeEvent(obj, type, fn) {if (typeof obj.removeEventListener != 'undefined') {obj.removeEventListener(type, fn, false);} else {for (var i in obj.events[type]) {if (obj.events[type][i] == fn) {delete obj.events[type][i];}}}
}// //获取Event对象
// function getEvent(event) {
// return event || window.event;
// }
//跨浏览器获取视口大小
function getInner() {if (typeof window.innerWidth != 'undefined') {return {//ff浏览器width: window.innerWidth,height: window.innerHeight}} else {return {//ie,choremwidth: document.documentElement.clientWidth,height: document.documentElement.clientHeight}}
}//删除左后空格
function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, '');
}//滚动条清零
function scrollTop() {document.documentElement.scrollTop = 0;document.body.scrollTop = 0;
}// /*阻止默认行为*/
// function preDef(event) {
// var e = getEvent(event);
// if (typeof e.preventDefault != 'undefined') {//W3C
// e.preventDefault();
// } else {//IE
// e.returnValue = false;
// }
// }

index.js 调用

window.onload = function () {$().getClass('member').hover(function () {$().getClass('member-ul').show();//当显示的时候把三角型换过方向$(this).css('background', 'url(images/arrow2.png) no-repeat right center');}, function () {$().getClass('member-ul').hide();//当隐藏的时候,在还原到以前的三角型$(this).css('background', 'url(images/arrow.png) no-repeat right center');});var login=$().getId('login');var screen=$().getId('screen');//登录框让登陆框垂直居中// var top =(document.documentElement.clientHeight-250)/2;// var left =(document.documentElement.clientWidth-350)/2;// $().getId('login').css('top',top+'px').css('left',left+'px');//登录框让登陆框垂直居中login.center(350,250).resize(function () {login.center(350,250);});//拖拽的时候固定在这里login.center(350,250).resize(function () {if(login.css('display'=='block')){//锁屏功能screen.lock();}})//点击登录按钮出现登录框$().getClass('login').click(function () {login.center(350, 250);login.css('display','block');// 锁屏功能screen.lock();});//点击close的时候关闭$().getClass('close').click(function () {login.css('display','none');screen.unlock();})//拖拽console.log(login.drag([$().getTagName('h2')]));;//拖拽流程://1.先点下去movedown//2.在点下的物体被选中,进行move移动//3.抬起鼠标,停止移动//点击某个物体,用oDiv即可,move和up是全局区域,也就是整个文档通用,应该用document
};


转:https://my.oschina.net/yongxinke/blog/831344



推荐阅读
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文介绍如何通过 JavaScript 实现一个基于鼠标坐标的 Tooltip 弹出层,详细解释了如何获取窗口和文档的尺寸及滚动位置,并优化了代码结构。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
author-avatar
多米音乐_34324431
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有