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



推荐阅读
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 在Oracle数据库中,使用Dbms_Output.Put_Line进行输出调试时,若单行字符超过255个,则会遇到ORA-20000错误。本文介绍了一种有效的方法来处理这种情况,通过创建自定义包和视图,实现对长字符串的分割和正确输出。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文介绍了一个SQL Server自定义函数,用于从字符串中提取仅包含数字和小数点的子串。该函数通过循环删除非数字字符来实现,并附带创建测试表、存储过程以演示其应用。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文探讨了在 PHP 中如何通过多种方式将外部参数传递到回调函数中,包括使用匿名函数和闭包。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
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社区 版权所有