热门标签 | 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



推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
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社区 版权所有