自己根据js的兼容封装了一个小小的js库
var gys = function () { }
//oParent父节点
//获取所有的子元素
gys.prototype.getElementChildren = function (oParent) {
return oParent.children;
}
//arr获取的数组,jsonCss是修改属性css的json数据
// gys.setElementCss(aLi, {"color":"red","backgroundColor":"yellow","backgroundImage":"url(../img/test.jpg)"});
//设置元素的css
gys.prototype.setElementCss = function (arr, jsonCss) {
var length = arr.length;
if (length == 0) return; //没有元素
else if (!length) { //单个元素
for (var key in jsonCss) {
arr.style[key] = jsonCss[key];
}
}
else { //元素集合
for (var i = 0; i < arr.length; i++) {
for (var key in jsonCss) {
arr[i].style[key] = jsonCss[key];
}
}
}
}
//获取第一个子元素
gys.prototype.getElementFirstChildren = function (oParent) {
if (oParent.firstElementChild)//高版本浏览器,
{
return oParent.firstElementChild;
}
else //IE6,7,8
return oParent.firstChild;
}
//获取最后一个子元素
gys.prototype.getElementLastChildren = function (oParent) {
if (oParent.lastElementChild)//高版本浏览器,
{
return oParent.lastElementChild;
}
else //IE6,7,8
return oParent.lastChild;
}
//获取下一个元素
gys.prototype.getElementNext = function (element) {
if (element.nextElementSibling) { //高版本浏览器
return element.nextElementSibling;
}
else { //IE6,7,8
return element.nextSibling;
}
}
//获取上一个元素
gys.prototype.getElementPrev = function (element) {
if (element.previousElementSibling) {
return element.previousElementSibling
}
else {
return element.previousSibling;
}
}
//ajax
/*
gys.ajax({ type: "get", url: "gps.txt", success: function (data) {
alert("成功" + data);
}, error: function (data) {
alert(data);
}
});
*/
gys.prototype.ajax = function (json) {
//1.创建服务器
var oAjax = null;
if (window.XMLHttpRequest) {
oAjax = new XMLHttpRequest();
}
else { //IE6
oAjax = new ActiveXObject("Microsoft.XMLHTTP");
}
/*2.连接服务器
open(方法,文件名,异步传输);
*/
//oAjax.open("GET", "gys.txt?=" + new Date().getTime(), true); //这里的date是为了去除缓存
oAjax.open(json.type.toUpperCase(), json.url, true);
//3.发送请求
oAjax.send();
//4.接受返回
oAjax.onreadystatechange = function () {
/*
oAjax.readyState:浏览器和服务器交互经行到哪一步了
0:未初始化.还没有调用open()方法.
1:载入.已调用send()方法,正在发送请求
2:载入完成.send()方法完成,已收到全部响应内容,这个时候的数据是可能没法使用,因为这个数据是加密过的,也有可能是为了节省带宽,进行压缩过的.
3:解析.正在解析相应内容
4:完成.响应内容解析完成,可以在客户端调用了.
*/
if (oAjax.readyState == 4) {//读取完成(并不代表成功)
if (oAjax.status == 200) { //成功
//alert("成功" + oAjax.responseText);
json.success(oAjax.responseText);
}
else {
//alert("失败");
//json.error(oAjax.responseText);
if (json.error) {
json.error("错误:"+oAjax.status);
}
}
}
}
}
//获取浏览器窗口位置
gys.prototype.getScreenPos = function () {
/*
IE,Safari,Opera,Chrome提供screenLeft和screenTop
Safari,Chrome,Firefox支持screenX和screenY(Opera对这个属性支持有差异)
*/
var left = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
var top = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
return { left: left, top: top };
}
gys.prototype.addHandler = function (element, type, handler) {//注册事件
if (element.addEventListener) {//非IE
element.addEventListener(type, handler, false);
}
else if (element.attachEvent) {//IE
element.attachEvent("on" + type, handler);
}
else {//dom0级
element["on" + type] = handler;
}
}
gys.prototype.removeHandler = function (element, type, handler) { //取消注册事件
if (element.removeEventListener) {//非IE
element.removeEventListener(type, handler, false);
}
else if (element.detachEvent) {//IE
element.detachEvent("on" + type, handler);
}
else {//dom0级
element["on" + type] = null;
}
}
gys.prototype.getEvent=function (event) {//返回event的引用
return event ? event : window.event;
}
gys.prototype.getTarget=function (event) {//返回鼠标单击的目标对象
return event.target || event.srcElement;
}
gys.prototype.preventDefault=function (event) {//取消默认事件(a的href,radio,checkbox,)
if (event.preventDefault) {
event.preventDefault();
}
else {
event.returnValue = false;
}
}
gys.prototype.stopPropagation= function (event) {//因为这个EventUtil只支持冒泡,不支持事件捕获,所以这个方法只能阻止冒泡
if (event.stopPrapagation) {
event.stopPropagation();
}
else {
event.cancelBubble = true;
}
}
gys.prototype.getRelatedTarget=function (event) {//获取相关元素
/*
页面中有一个div;当鼠标离开这个div时,事件的主目标是div,而相关元素是body.
mouseover:事件的主目标是获得光标的元素,而相关元素就是那个失去光标的元素.
mouseout:事件的主目标是失去光标的元素,而相关元素使获得光标的那个元素.
*/
if (event.relatedTarget) { return event.relatedTarget; }
else if (event.toElement) { return event.toElement; }
else if (event.fromElement) { return event.fromElement; }
else { return null; }
}
gys.prototype.getButton= function (event) {//获取鼠标按钮的点击方式
if (document.implementation.hasFeature("MouseEvents", "2.0")) { return event.button; }
else {
switch (event.button) {
case 0:
case 1:
case 3:
case 5:
case 7:
return 0; //左击
case 2:
case 6:
return 2; //中间键
case 4:
return 1; //右击
}
}
}
gys = new gys();
自己根据js的兼容封装了一个小小的js库的更多相关文章
- 自己封装的一个原生JS拖动方法。
代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...
- vue.js+web storm安装及第一个vue.js
小白还是自己写一遍吧 1.下载node.js https://nodejs.org/en/download/ 2.安装淘宝镜像(类似于阿里云的maven中央仓库镜像) 安装时间有点长 安装命令:npm ...
- JS类的封装及实现代码
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. ...
- 使用原生JS实现一个风箱式的demo,并封装了一个运动框架
声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的 ...
- 自己封装的一个JS分享组件
因为工作的需求之前也封装过一个JS分享插件,集成了我们公司常用的几个分享平台. 但是总感觉之前的结构上很不理想,样式,行为揉成一起,心里想的做的完美,实际上总是很多的偏差,所以这次我对其进行了改版. ...
- 自己封装的一个js方法用于获取显示的星期和日期时间
自己封装的一个js方法用于获取显示的星期和日期时间 /** * 获取用于显示的星期和日期时间 * @param date * @returns {string} */ function getWeek ...
- 自己封装一个弹窗JS
在我们平时的开发中,一定有很多地方需要用到弹窗提示功能.而系统自带的弹窗奇丑无比,而且我们不能自主控制.因此我们在开发过程中,自己封装一个弹窗JS方便我们使用. 代码demo如下: // JavaSc ...
- 一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
一般来说,系统框架的主内容区会引入另一个独立的 Web 页面来实现系统的功能,所以在在 Tabs 里的每一个标签页里使用 iframe 标签来引入子页面.所以这里可以将 Tabs 的 Content ...
- 【原创】使用JS封装的一个小型游戏引擎及源码分享
1 /** * @description: 引擎的设计与实现 * @user: xiugang * @time: 2018/10/01 */ /* * V1.0: 引擎实现的基本模块思路 * 1.创建 ...
随机推荐
- About RFC
RFC说明 Request For Comments (RFC),是一系列以编号排定的文件,几乎所有的因特网标准都收录在RFC文件之中,如果你想成为网络方面的专家,那么RFC无疑是最重要也是最经常需要 ...
- Skynet服务器框架(十) CentOS 防火墙设置
引言: 今天修改了 skynet 服务器的 IP 地址(即 config 文件中的 address 和 master 两项参数,IP 与当前及其的保持一致,端口号为 2017),然后使用一个简单的客户 ...
- 一起来点React Native——常用组件之Image
一.前言 在开发中还有一个非常重要的组件Image,通过这个组件可以展示各种各样的图片,而且在React Native中该组件可以通过多种方式加载图片资源. 二.Image组件的基本用法 2.1 从当 ...
- iOS8 对开发者来说意味着什么?
今天凌晨,Apple WWDC2014 iOS8 正式推出! 也许,对于广大iOS用户来说,iOS8的创新并不是特别多. 但对于开发者来说,影响却将会是无比巨大的! 正如Apple官网上的广告:Hug ...
- B+与B-树
1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少 ...
- HDU 1814 模板题 2-sat
敲模板做的,不知道怎么就对了,注意一下建边即可··· 贴代码: #include<cstdio> #include<vector> using namespace std; # ...
- 【Quartz】Quartz将Job保存在数据库中所需表的说明
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
- 在Docker中运行crontab
在把自己的项目通过Docker进行打包时,由于项目中用到了crontab,不过使用到的基础镜像python:3.6-slim并没有安装这项服务,记录下在镜像中安装和配置crontab的过程. Dock ...
- 剑指offer-顺时针打印矩阵-二维数组
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- 记录 ThinkPHP 5.* 漏洞修复后的情况
记录 ThinkPHP 5.* 漏洞修复后的情况 ThinkPHP 官方 2018-12-09 下午收到漏洞报告. 2018-12-09 晚上看到 Git 已经更新了,修复了漏洞. 2018-12-1 ...