澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:响应式增强设计,实现

响应式加强安排

2015/03/18 · CSS, HTML5, JavaScript · 响应式, 设计

本文由 伯乐在线 - fzr 翻译,黄利民 校稿。未经许可,禁止转发!
英文出处:24ways.org。迎接出席翻译组。

24ways 在这10年中早就稳步变得庞大了。在因特网历史中那已是三个世代永恒的了。回看一下在前段时间里大家见证全体变化:Ajax的兴起,移动设备的剧增,前端开辟工具不可预感的前景。

工具和本事来来往往,兴起衰落,但在过去的十年中有一件事于自家来讲是平素从未成形的:渐进式巩固。

渐进式加强不是一门技艺。它更疑似一种思维格局。渐进式加强鼓励你去思维网页所提供的着力意义,而不是去想贰个已形成网页怎样显示的微小意思。所以渐进式加强允许你以更抽象的不二等秘书籍考虑宗旨功用,而不是纠结于网页在不利的宽屏设备上的不错状态。

比如你早已规定要增加的主导职能是怎么着–向购物栏中增多一件货色,发布一条新闻,分享一张图纸–然后您可以以一种最简便的法子落成该功效。那平时也意味着要从能够的不合时宜的HTML出手。你所要求的经常只是链接和表格。然后,只要您曾经使得该中央职能为主专门的学问,你就能够开首对越来越多当代浏览器抓实际效果率以稳步提供越来越好的用户体验。

以这种方式专门的工作的利润不止是你的网页可以在旧式浏览器辽宁中华南理工业余大学学学程公司作(就算只是骨干能运作)。它还是可以确定保障假诺在前天的浏览器中冒出的小毛病不至于形成大祸。

众人对渐进式巩固存在多个误会,以为渐进式巩固就是花时间消除旧式浏览器,可是事实却反而。将基本成效投入使用并不会开支太久。而且若是您早就到位那部分干活,你就能够随心所欲地去测试新型最棒的浏览器本事,脑中的意识是就是它们今后还不可能被分布帮忙,也平昔不难点,因为您早就把最保障的事物投入使用了。

对待Web发展的关键在于意识到不会有最后的接口—恐怕会有无数唯有一线差距但会依据于自由时刻自便用户的性质和容积的接口。网址无需在每二个浏览器中都扳平。

实在领会了那么些正是贰个高大地开垦进取。你能够把日子开支在为更加的多浏览器提供最棒心得的同不平日候保险能在其余建设构造职业的地点落实中央效能,而不是奋力令你的网址在出入巨大的浏览器中一模二样。

允许自身以三个简短的事例来发挥:导航。

先是步:宗旨职能

假定大家今后有贰个关于圣诞节12天吉庆的简练网址,一天叁个页面。那几个宗旨功效也非凡清楚了:

1、通晓当中专擅一天。
2、从一天到另一天浏览。

率先个成效能够经过将文件用头条,段落以及具有常用的HTML结构化标签组装起来完毕。第三个则通过一雨后鞭笋的超链接实现。
那么以后导航列表最适合放在何地啊?个人来讲,作者是三个跳转到页脚导航情势的客官。那么些形式先放网页内容,其次才是导航。页面顶端有贰个涵盖href属性的连日指向导航的竹签。

XHTML

<a class="control" href="#menu">Menu</a> ... <nav id="menu" role="navigation">... <a class="control" href="#top">Dismiss</a></nav>

1
2
3
4
5
<a class="control" href="#menu">Menu</a>
...
 
<nav id="menu" role="navigation">...
<a class="control" href="#top">Dismiss</a></nav>

查阅页脚超链导航航空模型型式的亲自去做。

由于唯有超链接,这几个方式也只是在互连网初兴时代能在每二个浏览器上行事。Web浏览器要做的只是浮现超链接(正如名字所示)。

其次步:巩固型布局

在小荧屏设备上,比方移动电话,页脚链接形式是叁个极其轻便的消除办法。一旦有更加多的显示器空间可使用时,就能够使用CSS将导航重新定位在剧情之上。作者得以安装position属性为absolute,使用弹性布局盒,或许安装display属性为table。

CSS

@media all and (min-width: 35em) { .control { display: none; } body { display: table; } [role="navigation"] { display: table-caption; columns: 6 15em; } }

1
2
3
4
5
6
7
8
9
10
11
12
@media all and (min-width: 35em) {
  .control {
    display: none;
  }
  body {
    display: table;
  }
  [role="navigation"] {
    display: table-caption;
    columns: 6 15em;
  }
}

翻开宽屏样式的言传身教。

第三步:增强!

不错。未来自家曾经得感觉全体人提供基本职能了,而且对宽屏也可以有特别不错的响应风格设计。到这边本人能够告一段落脚步了,但渐进式巩固的莫过于优点却是笔者还一贯不成功的。从这时开头,小编能够疯狂地为今世浏览器增添种种奇异的优化职能,而不用忧虑无法为旧式浏览器提供退路—退路一度筹划好了。

骨子里小编想为小显示器的器具提供二个优质的屏外画布。上面是自个儿的安排:

1、 将导航放置在主内容下边。
2、 监听伪类为.control的链接是或不是被点击并堵住其影响。
3、 当那个链接被点击后,为本位body切换赋予伪类.active。
4、 借使伪类.active存在,将内容滑出以突显导航。

上边是永久内容和导航的CSS代码:

CSS

@media all and (max-width: 35em) { [role="main"] { transition: all .25s; width: 100%; position: absolute; z-index: 2; top: 0; right: 0; } [role="navigation"] { width: 75%; position: absolute; z-index: 1; top: 0; right: 0; } .active [role="main"] { transform: translateX(-75%); } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@media all and (max-width: 35em) {
  [role="main"] {
    transition: all .25s;
    width: 100%;
    position: absolute;
    z-index: 2;
    top: 0;
    right: 0;
  }
  [role="navigation"] {
    width: 75%;
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
  }
  .active [role="main"] {
    transform: translateX(-75%);
  }
}

在自己的JavaScript代码中,小编将会监听伪类.control链接上的任何点击事件,然后据此为主导body切换赋予伪类.active。

JavaScript

(function (win, doc) { 'use strict'; var linkclass = 'control', activeclass = 'active', toggleClassName = function (element, toggleClass) { var reg = new RegExp('(s|^)' toggleClass '(s|$)'); if (!element.className.match(reg)) { element.className = ' ' toggleClass; } else { element.className = element.className.replace(reg, ''); } }, navListener = function (ev) { ev = ev || win.event; var target = ev.target || ev.srcElement; if (target.className.indexOf(linkclass) !== -1) { ev.preventDefault(); toggleClassName(doc.body, activeclass); } }; doc.addEventListener('click', navListener, false); }(this, this.document));

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(function (win, doc) {
  'use strict';
  var linkclass = 'control',
    activeclass = 'active',
    toggleClassName = function (element, toggleClass) {
      var reg = new RegExp('(s|^)' toggleClass '(s|$)');
      if (!element.className.match(reg)) {
        element.className = ' ' toggleClass;
      } else {
        element.className = element.className.replace(reg, '');
      }
    },
    navListener = function (ev) {
      ev = ev || win.event;
      var target = ev.target || ev.srcElement;
      if (target.className.indexOf(linkclass) !== -1) {
        ev.preventDefault();
        toggleClassName(doc.body, activeclass);
      }
    };
  doc.addEventListener('click', navListener, false);
}(this, this.document));

本人早就筹算安妥了,是吗?哪有那么快!

复制代码 代码如下:

点评:固然这几天的主流浏览器已经实现了许多的HTML5新特点,可是洋洋开拓者根本就没在意到这几个更轻松,也很有用的API,本体系小说介绍那些接口API,同期也期待能鼓励更加多开辟者去追究那几个还不盛名的API

复制代码 代码如下:

上次【JS-完毕导航栏悬停】聊起,导航栏悬停的百般页面在IE上运维的时候,会出导航栏不停的震惊难点。

正式符合测试

自家假诺在自家的代码中早已落到实处add伊夫ntListener函数。那并不是一个白山的譬如。因为JavaScript不像HTML或CSS那样具备容错性。假如您使用了一个浏览器无法识其他HTML元素或性质,或是使用了一个浏览器无法领略的CSS选拔器,属性或是值,那都不是大题材。浏览器会忽略掉它不可能识其余东西:既不会抛出荒唐也不会截止分析文件。

JavaScript就分歧了。假诺您的JavaScript代码有错误,又恐怕应用了四个浏览器不能识其余JavaScript函数或性质,浏览器会抛出荒谬,而且会终止深入分析文件。那正是怎么JavaScript中特征在动用以前必须求测试。那也认证将主导功效信赖于JavaScript是老大不安全的。

就作者来讲,作者必要测试add伊芙ntListener函数的存在性:

JavaScript

(function (win, doc) { if (!win.addEventListener) { return; } ... var enhanceclass = 'cutsthemustard'; doc.documentElement.className = ' ' enhanceclass; }(this, this.document));

1
2
3
4
5
6
7
8
(function (win, doc) {
  if (!win.addEventListener) {
    return;
  }
  ...
  var enhanceclass = 'cutsthemustard';
  doc.documentElement.className = ' ' enhanceclass;
}(this, this.document));

BBC的大腕们称这种特性测试为行业内部符合测试。假使二个浏览器通过了该测试,它就高达了标准,所以它就赢得了提升品质。假若三个浏览器没能达到标准,它就从不增进的质量。那也不算什么坏事,记住,网址没有必要在种种浏览器中都表现的如出一辙。

本身期望确认保障自身的离线画布样式只可以使用于符合规范的浏览器。笔者会利用JavaScript为文档加多多少个伪类.cutsthemustard:

JavaScript

(function (win, doc) { if (!win.addEventListener) { return; } ... var enhanceclass = 'cutsthemustard'; doc.documentElement.className = ' ' enhanceclass; }(this, this.document));

1
2
3
4
5
6
7
8
(function (win, doc) {
  if (!win.addEventListener) {
    return;
  }
  ...
  var enhanceclass = 'cutsthemustard';
  doc.documentElement.className = ' ' enhanceclass;
}(this, this.document));

这段时间自家能够使用已存在的类名来调动自身的CSS:

CSS

@media all and (max-width: 35em) { .cutsthemustard [role="main"] { transition: all .25s; width: 100%; position: absolute; z-index: 2; top: 0; right: 0; } .cutsthemustard [role="navigation"] { width: 75%; position: absolute; z-index: 1; top: 0; right: 0; } .cutsthemustard .active [role="main"] { transform: translateX(-75%); } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@media all and (max-width: 35em) {
  .cutsthemustard [role="main"] {
    transition: all .25s;
    width: 100%;
    position: absolute;
    z-index: 2;
    top: 0;
    right: 0;
  }
  .cutsthemustard [role="navigation"] {
    width: 75%;
    position: absolute;
    z-index: 1;
    top: 0;
    right: 0;
  }
  .cutsthemustard .active [role="main"] {
    transform: translateX(-75%);
  }
}

查阅符合标准的加强型离线画布导航演示。记住,那只适用于小显示屏,所以您或者会要求将浏览器窗口压扁。

/*-----------------------------------
Web Application JavaScript Library
2009.11 janchie
------------------------------------*/

原稿地址:5 HTML5 APIs You Didn’t Know Existed
初稿日期: 二零零六年0四月二十一日
翻译日期: 2011年3月7日
当大家看来只怕说出"HTML5"那个词的时候,猜度至少有四分之二上述的人,会联想到他既是贰个妖艳而又充满吸重力的美眉,相同的时候也是壹只能把你搞得焦头烂额的独角兽,那能怪大家那些开拓者吗?
作者们注意到那一个基础的Api停滞发展了那般短时间的年月(大约是1996-二〇〇九),以至于像"placeholder"这样基础的三个附加作用,也要开销大家十分的短的小时来拍卖。
纵然如今的主流浏览器已经完结了无数的HTML5新特色,但是众多开垦者根本就没留意到这一个更简洁,也很有用的API。
本种类作品介绍那一个接口API,同一时候也冀望能砥砺越多开荒者去追究那多少个还不著名的API。
Element.classList
其一性格已经发表了少数年,通过classList,大家能够透过JavaScript来决定底层css的class属性.
代码如下:

/*-----------------------------------
Web Application JavaScript Library
2009.11 janchie
------------------------------------*/

缓和格局如下:

提升全体!

那可是是七个周旋相比轻松的例证,但它表明了渐进式加强背后的思辨:只要你早已为全部人提供了宗旨功能,就足以随心所欲为今世浏览器扩张最盛行的滋长质量。

渐进式加强并不意味着你不可能不为全部人都提供一样的效益—恰恰相反。那也是为啥供给尽早明确你的为主职能是如何,而且保险那些中央成效能够被大部分主导技能提供完毕。在那么些点的底子上,你可以随便增添越来越多的不属于注重职责的表征。你能够在能接济越来越多特点的浏览器上相应的足够越多的性质,例如CSS的动画片效果,JavaScript的固化功用以及HTML中新的输入框类型。

正如本身所说的,渐进式加强不是一门技巧。它是一种沉思格局。假诺你已经起来选拔这种思维格局,你就曾经绸缪好了面临接下去的十年了。

赞 1 收藏 评论

//String原生对象扩充 置空左右端空格
String.prototype.trim = function(){
return this.replace(/(^[sntr]*)|([snrt]*$)/g, "");
};
//Date原生对象扩展 格式化输出
Date.prototype.format = function (string) {
var self = this;
var p = function p(s) {
return (s.toString().length == 1) ? "0" s : s;
};
return string ? string.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,
function (string) {
switch (string) {
case "hh": return p(self.getHours() < 13 ? self.getHours() : (self.getHours() - 12));
case "h": return self.getHours() < 13 ? self.getHours() : (self.getHours() - 12);
case "HH": return p(self.getHours());
case "H": return self.getHours();
case "mm": return p(self.getMinutes());
case "m": return self.getMinutes();
case "ss": return p(self.getSeconds());
case "s": return self.getSeconds();
case "yyyy": return self.getFullYear();
case "yy": return self.getFullYear().toString().substring(2, 4);
case "dddd": return self.getDayName();
case "ddd": return self.getDayName(true);
case "dd": return p(self.getDate());
case "d": return self.getDate().toString();
case "MMMM": return self.getMonthName();
case "MMM": return self.getMonthName(true);
case "MM": return p((self.getMonth() 1));
case "M": return self.getMonth() 1;
case "t": return self.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);
case "tt": return self.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;
case "zzz":
case "zz":
case "z": return "";
}
}) : this.toString();
};
/*------------------------------------*/

代码如下:

//String原生对象扩张 置空左右端空格
String.prototype.trim = function(){
return this.replace(/(^[sntr]*)|([snrt]*$)/g, "");
};
//Date原生对象扩充 格式化输出
Date.prototype.format = function (string) {
var self = this;
var p = function p(s) {
return (s.toString().length == 1) ? "0" s : s;
};
return string ? string.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,
function (string) {
switch (string) {
case "hh": return p(self.getHours() < 13 ? self.getHours() : (self.getHours() - 12));
case "h": return self.getHours() < 13 ? self.getHours() : (self.getHours() - 12);
case "HH": return p(self.getHours());
case "H": return self.getHours();
case "mm": return p(self.getMinutes());
case "m": return self.getMinutes();
case "ss": return p(self.getSeconds());
case "s": return self.getSeconds();
case "yyyy": return self.getFullYear();
case "yy": return self.getFullYear().toString().substring(2, 4);
case "dddd": return self.getDayName();
case "ddd": return self.getDayName(true);
case "dd": return p(self.getDate());
case "d": return self.getDate().toString();
case "MMMM": return self.getMonthName();
case "MMM": return self.getMonthName(true);
case "MM": return p((self.getMonth() 1));
case "M": return self.getMonth() 1;
case "t": return self.getHours() < 12 ? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);
case "tt": return self.getHours() < 12 ? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;
case "zzz":
case "zz":
case "z": return "";
}
}) : this.toString();
};
/*------------------------------------*/

将导航栏的固定格局由原来的absolute改为fixed,也不晓得干什么改为fixed,就不抖了。。-_-||

有关小编:fzr

澳门新浦京娱乐场网站 1

微博:@fzr-fzr) 个人主页 · 作者的篇章 · 26

澳门新浦京娱乐场网站 2

//证明对象
var App = {};
//对象承袭或品质合并
App.extend = function(obj, hash) {
this.each(hash, function(key, value) {
obj[key] = value;
});
return obj;
};
//遍历
App.each = function(obj, func, context) {
var length = obj.length, i = -1;
if(length !== undefined) {
while( i < length) if(func.call(context, obj[i], i, obj, length) === false) break;
}
else for(var key in obj) if(obj.hasOwnProperty(key)) if(func.call(context, key, obj[key], obj) === false) break;
return obj;
};
(function(doc, win){
var string = Object.prototype.toString,
quirks = doc.compatMode === "BackCompat",
docelem = doc.documentElement,
ua = win.navigator.userAgent.toLowerCase(),
version = (ua.match( /.(?:rv|it|ra|ie)[/: ]([d.] )/ ) || [])[1],
isChrome = /chrome/.test(ua),
isWebKit = /webkit/.test(ua),
isSafari = !isChrome && isWebKit,
isOpera = /opera/.test(ua),
isIE = /msie/.test( ua ) && !isOpera,
isFF = /firefox/.test(ua);
//Dom加载
doc.ready = function(func) {
var isReady = false,doReady = function() {
if (isReady) return;
isReady = true; func();
};
if (isIE) {
if (docelem.doScroll && win.self == win.top) {
(function() {
if (isReady) return;
try {
docelem.doScroll("left");
} catch (error) {
setTimeout(arguments.callee, 0);
return;
}
doReady();
})();
}else {
if (isReady) return;
this.attachEvent("onreadystatechange", function() {
if (doc.readyState === "complete") {
doc.detachEvent("onreadystatechange", arguments.callee);
doReady();
}
});
}
win.attachEvent('onload', doReady);
}else if (isWebKit && version < 525) {
(function() {
if (isReady) return;
if (/loaded|complete/.test(doc.readyState))
doReady();
else
setTimeout(arguments.callee, 0);
})();
win.addEventListener('load', doReady, false);
}else {
if (!isFF)
this.addEventListener("DOMContentLoaded", function() {
doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
doReady();
}, false);
this.addEventListener('load', doReady, false);
}
};
App.extend(App,{
//类型检查测试
isArray: function(v) { //是或不是为数组
return string.apply(v) === "[object Array]";
},
isFunction: function(v) { //是不是为函数体
return string.apply(v) === "[object Function]";
},
isNumber: function(v) { //是还是不是为数字
return typeof v === "number" && isFinite(v);
},
isDate: function(v) { //是不是为日期
return string.apply(v) === "[object Date]";
},
isElement: function(v) { //是或不是为Dom成分节点
return !!(v && v.nodeType === 1);
},
// 浏览器检验
isOpera: isOpera,
isChrome: isChrome,
isWebKit: isWebKit,
isSafari: isSafari,
isIE: isIE,
isFF: isFF,
isQuirks:quirks,
getVersion:version,

// 使用classList属性(Dom元素,css类名)
function toggleClassList(element,cName){
// 1. classList API
// 切换类,有则移除,未有则增长
if(element.classList.toggle){
element.classList.toggle(cName);
return true;
}
// !!! 其实,本函数 toggleClassList 假如支持的话,
// 那么上边包车型客车代码就不会被实施,此处仅作示范,请灵活应用
// 2. classList API
// element 的class属性是还是不是包蕴 hide 那几个CSS类
var hasHide = element.classList.contains(cName);
//
if(hasHide){
// 3. classList API
// 移除hide类
element.classList.remove(cName);
} else {
// 4. classList API
// 添加hide类
element.classList.add(cName);
}
return true;
};

//证明对象
var App = {};
//对象传承或质量合并
App.extend = function(obj, hash) {
this.each(hash, function(key, value) {
obj[key] = value;
});
return obj;
};
//遍历
App.each = function(obj, func, context) {
var length = obj.length, i = -1;
if(length !== undefined) {
while( i < length) if(func.call(context, obj[i], i, obj, length) === false) break;
}
else for(var key in obj) if(obj.hasOwnProperty(key)) if(func.call(context, key, obj[key], obj) === false) break;
return obj;
};
(function(doc, win){
var string = Object.prototype.toString,
quirks = doc.compatMode === "BackCompat",
docelem = doc.documentElement,
ua = win.navigator.userAgent.toLowerCase(),
version = (ua.match( /.(?:rv|it|ra|ie)[/: ]([d.] )/ ) || [])[1],
isChrome = /chrome/.test(ua),
isWebKit = /webkit/.test(ua),
isSafari = !isChrome && isWebKit,
isOpera = /opera/.test(ua),
isIE = /msie/.test( ua ) && !isOpera,
isFF = /firefox/.test(ua);
//Dom加载
doc.ready = function(func) {
var isReady = false,doReady = function() {
if (isReady) return;
isReady = true; func();
};
if (isIE) {
if (docelem.doScroll && win.self == win.top) {
(function() {
if (isReady) return;
try {
docelem.doScroll("left");
} catch (error) {
setTimeout(arguments.callee, 0);
return;
}
doReady();
})();
}else {
if (isReady) return;
this.attachEvent("onreadystatechange", function() {
if (doc.readyState === "complete") {
doc.detachEvent("onreadystatechange", arguments.callee);
doReady();
}
});
}
win.attachEvent('onload', doReady);
}else if (isWebKit && version < 525) {
(function() {
if (isReady) return;
if (/loaded|complete/.test(doc.readyState))
doReady();
else
setTimeout(arguments.callee, 0);
})();
win.addEventListener('load', doReady, false);
}else {
if (!isFF)
this.addEventListener("DOMContentLoaded", function() {
doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
doReady();
}, false);
this.addEventListener('load', doReady, false);
}
};
App.extend(App,{
//类型检验
isArray: function(v) { //是或不是为数组
return string.apply(v) === "[object Array]";
},
isFunction: function(v) { //是还是不是为函数体
return string.apply(v) === "[object Function]";
},
isNumber: function(v) { //是还是不是为数字
return typeof v === "number" && isFinite(v);
},
isDate: function(v) { //是还是不是为日期
return string.apply(v) === "[object Date]";
},
isElement: function(v) { //是还是不是为Dom成分节点
return !!(v && v.nodeType === 1);
},
// 浏览器检查评定
澳门新浦京娱乐场网站:响应式增强设计,实现导航栏悬停效果。isOpera: isOpera,
isChrome: isChrome,
isWebKit: isWebKit,
isSafari: isSafari,
isIE: isIE,
isFF: isFF,
isQuirks:quirks,
getVersion:version,

复制代码 代码如下:

//取id元素
$: function(id) {
return typeof id === "string" ? doc.getElementById(id) : id;
},
//取name成分集结
$N:function(name){
return doc.getElementsByName(name);
},
//取tag成分集结
$T:function(tag, root){
return (root || doc).getElementsByTagName(tag);
},
//按属性名(是还是不是包涵)、值、范围取成分集合
$A:function(attrName, attrValue, tag, root){
var elems = doc.all ? doc.all : this.$T( tag || "*",root || doc), result = [],
attVal = (typeof attrValue != "undefined")? new RegExp("(^|\s)" attrValue "(\s|$)") : null;
for(var i=0; i<elems.length; i ){
attr = elems[i][attrName] || elems[i].getAttribute(attrName);
if(typeof attr === "string" && attr.length > 0){
if(typeof attrValue === "undefined" || (attVal && attVal.test(attr))){
result.push(elems[i]);
}
}
}
return result;
},
//取body元素
$B: doc.body || docelem,
//取Class属性元素集结
$C:function(attrValue, tag, root){
return this.$A("className",attrValue, tag, root);
},
//取浏览器窗体宽度
getWinWidth: win.innerWidth || docelem.clientWidth || doc.body.clientWidth,
//取浏览器窗体高度
getWinHeight: win.innerHeight || docelem.clientHeight || doc.body.clientHeight,
//取成分样式
澳门新浦京娱乐场网站:响应式增强设计,实现导航栏悬停效果。getStyle: function(elem,name){
if(elem.style[name]){
return elem.style[name];
}else if(elem.currentStyle){
return elem.currentStyle[name];
}else if(doc.defaultView && doc.defaultView.getComputedStyle){
name = name.replace(/([A-Z])/g,"-$1");
name = name.toLowerCase();
var s = doc.defaultView.getComputedStyle(elem,"");
return s && s.getPropertyValue(name);
}else{
return null;
}
},
//获取成分显示屏坐标值
getPosition: function() {
return docelem.getBoundingClientRect && function(o){
var pos = o.getBoundingClientRect(), root = o.ownerDocument || o.doc;
return {left:pos.left root.documentElement.scrollLeft,top:pos.top root.documentElement.scrollTop};
} || function(o){
var x = 0, y = 0;
do{x = o.offsetLeft;y = o.offsetTop;}while((o=o.offsetParent));
return {left:x,top:y};
};
}(),
//设置发光度
setOpacity: function (elem,num){
if(elem.filters){
elem.style.filter = "alpha(opacity=" num ")";
}else{
elem.style.opacity = num/100;
}
},
//隐藏或展现成分
hide: function(elem){elem.style.display = "none";},
show: function(elem){elem.style.display = "block";},
toggle: function(elem){
elem.style.display = this.getStyle(elem,"display") === "none" ?"block":"none";
},
//成分Class属性操作
addClass: function(elem, clsName) {
if (elem.className === '') {
elem.className = clsName;
}else if (elem.className !== '' && (' ' elem.className ' ').indexOf(' ' clsName ' ') === -1) {
elem.className = elem.className ' ' clsName;
}
},
removeClass: function(elem, clsName) {
if (clsName && (' ' elem.className ' ').indexOf(' ' clsName ' ') > -1) {
elem.className = (' ' elem.className ' ').replace(' ' clsName ' ', ' ').replace(/^ | $/g,'');
}
},
//追加Html文本对象( 帮助Table )
append: function(elem, text) {
if (typeof text === "string") {
if (elem.insertAdjacentHTML){
if (elem.tagName === "TABLE"){
var html = elem.outerHTML,ep = elem.parentNode,sl = html.length;
text = html.substr(0,sl-8) text html.substr(sl-8,sl);
ep.insertAdjacentHTML("beforeEnd", text);
ep.replaceChild(ep.lastChild,elem);
}else{
elem.insertAdjacentHTML("beforeEnd", text);
}
}else {
var rlt = null, rg = doc.createRange(), fm = rg.createContextualFragment(text);
rlt ? elem.insertBefore(fm, rlt) : elem.appendChild(fm);
}
}else if (typeof text === "object") elem.appendChild(text);
},
//删除元素
remove:function(elem){
if (elem.parentNode) elem.parentNode.removeChild(elem);
},
//置空成分内容及子节点
empty:function(elem){
while(elem.firstChild){
elem.removeChild(elem.firstChild);
}
},
//图像预加载
loadimages: function(){
var a = arguments,loads = function(){
if(doc.images){ if(!doc.ps) doc.ps = [];
var i,j=doc.ps.length; for(i=0; i<a.length; i )
if (a[i].indexOf("#")!=0){ doc.ps[j] = new Image; doc.ps[j ].src=a[i];}}
};
arguments.callee.caller ? loads():doc.ready(loads);
},

ContextMenu API
经测试chrome28不管用。。。
新的API,ContextMenu 是极好的接口: 此接口允许你很简短地加多菜单项到浏览器的上下文菜单(右键菜单),而不是去覆盖浏览器的暗许右键菜单。
急需留意的是,你最佳应用js脚本来动态的创始菜单contextmenu,那样能够制止页面禁止使用JS脚本的状况下出现多余的HTML代码。
代码如下:

//取id元素
$: function(id) {
return typeof id === "string" ? doc.getElementById(id) : id;
},
//取name成分集合
$N:function(name){
return doc.getElementsByName(name);
},
//取tag成分集合
$T:function(tag, root){
return (root || doc).getElementsByTagName(tag);
},
//按属性名(是还是不是含有)、值、范围取成分集结
$A:function(attrName, attrValue, tag, root){
var elems = doc.all ? doc.all : this.$T( tag || "*",root || doc), result = [],
attVal = (typeof attrValue != "undefined")? new RegExp("(^|\s)" attrValue "(\s|$)") : null;
for(var i=0; i<elems.length; i ){
attr = elems[i][attrName] || elems[i].getAttribute(attrName);
if(typeof attr === "string" && attr.length > 0){
if(typeof attrValue === "undefined" || (attVal && attVal.test(attr))){
result.push(elems[i]);
}
}
}
return result;
},
//取body元素
$B: doc.body || docelem,
//取Class属性成分集结
$C:function(attrValue, tag, root){
return this.$A("className",attrValue, tag, root);
},
//取浏览器窗体宽度
getWinWidth: win.innerWidth || docelem.clientWidth || doc.body.clientWidth,
//取浏览器窗体中度
getWinHeight: win.innerHeight || docelem.clientHeight || doc.body.clientHeight,
//取成分样式
getStyle: function(elem,name){
if(elem.style[name]){
return elem.style[name];
}else if(elem.currentStyle){
return elem.currentStyle[name];
}else if(doc.defaultView && doc.defaultView.getComputedStyle){
name = name.replace(/([A-Z])/g,"-$1");
name = name.toLowerCase();
var s = doc.defaultView.getComputedStyle(elem,"");
return s && s.getPropertyValue(name);
}else{
return null;
}
},
//获取成分显示屏坐标值
getPosition: function() {
return docelem.getBoundingClientRect && function(o){
var pos = o.getBoundingClientRect(), root = o.ownerDocument || o.doc;
return {left:pos.left root.documentElement.scrollLeft,top:pos.top root.documentElement.scrollTop};
} || function(o){
var x = 0, y = 0;
do{x = o.offsetLeft;y = o.offsetTop;}while((o=o.offsetParent));
return {left:x,top:y};
};
}(),
//设置折射率
setOpacity: function (elem,num){
if(elem.filters){
elem.style.filter = "alpha(opacity=" num ")";
}else{
elem.style.opacity = num/100;
}
},
//隐藏或呈现成分
hide: function(elem){elem.style.display = "none";},
show: function(elem){elem.style.display = "block";},
toggle: function(elem){
elem.style.display = this.getStyle(elem,"display") === "none" ?"block":"none";
},
//元素Class属性操作
addClass: function(elem, clsName) {
if (elem.className === '') {
elem.className = clsName;
}else if (elem.className !== '' && (' ' elem.className ' ').indexOf(' ' clsName ' ') === -1) {
elem.className = elem.className ' ' clsName;
}
},
removeClass: function(elem, clsName) {
if (clsName && (' ' elem.className ' ').indexOf(' ' clsName ' ') > -1) {
elem.className = (' ' elem.className ' ').replace(' ' clsName ' ', ' ').replace(/^ | $/g,'');
}
},
//追加Html文本对象( 支持Table )
append: function(elem, text) {
if (typeof text === "string") {
if (elem.insertAdjacentHTML){
if (elem.tagName === "TABLE"){
var html = elem.outerHTML,ep = elem.parentNode,sl = html.length;
text = html.substr(0,sl-8) text html.substr(sl-8,sl);
ep.insertAdjacentHTML("beforeEnd", text);
ep.replaceChild(ep.lastChild,elem);
}else{
elem.insertAdjacentHTML("beforeEnd", text);
}
}else {
var rlt = null, rg = doc.createRange(), fm = rg.createContextualFragment(text);
rlt ? elem.insertBefore(fm, rlt) : elem.appendChild(fm);
}
}else if (typeof text === "object") elem.appendChild(text);
},
//删除成分
remove:function(elem){
if (elem.parentNode) elem.parentNode.removeChild(elem);
},
//置空成分内容及子节点
empty:function(elem){
while(elem.firstChild){
elem.removeChild(elem.firstChild);
}
},
//图像预加载
loadimages: function(){
var a = arguments,loads = function(){
if(doc.images){ if(!doc.ps) doc.ps = [];
var i,j=doc.ps.length; for(i=0; i<a.length; i )
if (a[i].indexOf("#")!=0){ doc.ps[j] = new Image; doc.ps[j ].src=a[i];}}
};
arguments.callee.caller ? loads():doc.ready(loads);
},

div.navigation{
width: 800px;
height: 40px;
background: red;
margin: 4px auto 0;
top: 400px;
left: 0px;
position: fixed;
}

//事件绑定
bind: function () {
if (win.addEventListener) {
return function(elem, sType, fnc) {
elem.addEventListener(sType, fnc, false);
};
} else if (win.attachEvent) {
return function(elem, sType, fnc) {
elem.attachEvent("on" sType, fnc);
};
} else {
return function(){};
}
}(),
//解除事件绑定
unbind: function(elem, sType, fnc){
if(elem.removeEventListener){
elem.removeEventListener(sType, fnc, false);
}else if(elem.detachEvent){
elem.detachEvent("on" sType, fnc);
}else{
elem["on" sType] = null;
}
},
//禁止事件冒泡
stopPropagation: function(ev) {
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
},
//禁止私下认可事件动作
preventDefault: function(ev) {
if (ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
},
//获取鼠标地点
getXY: function(ev){
return {
x:ev.pageX ? ev.pageX : ev.clientX docelem.scrollLeft,
y:ev.pageY ? ev.pageY : ev.clientY docelem.scrollTop
};
},
//绑定拖动事件
drag: function (obj, obj2){//obj:移动的目的 obj2:拖动点
obj2 = obj2 || obj; //借使不设拖动点,那么拖动点即运动的靶子
var x, y, ut = this;
obj2.onmousedown = function(e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
x = ut.getXY(e).x - parseInt(obj.style.left);
y = ut.getXY(e).y - parseInt(obj.style.top);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
obj.style.left = ut.getXY(e).x - x "px";
obj.style.top = ut.getXY(e).y - y "px";
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
}
},
//绑定横向滚动事件
sliderX : function (obj,x1,x2,overEvent,upEvent){
var x, t , ut = this;
obj.onmousedown = function (e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
t = ut.getXY(e).x - parseInt(obj.style.left);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
x = ut.getXY(e).x - t;
if(x<x1) x=x1;
if(x>x2) x=x2;
obj.style.left = x "px";
overEvent && overEvent(x);
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
upEvent && upEvent(x);
}
},
//绑定竖向滚动事件
sliderY : function (obj,y1,y2,overEvent,upEvent){
var y, t , ut = this;
obj.onmousedown = function (e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
t = ut.getXY(e).y - parseInt(obj.style.top);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
y = ut.getXY(e).y - t;
if(y<y1) y=y1;
if(y>y2) y=y2;
obj.style.top = y "px";
overEvent && overEvent(y);
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
upEvent && upEvent(y);
}
},
//设置cookie
setCookie:function(n, v, t){
var exp = new Date();
exp.setTime(exp.getTime() (t||24)*60*60*1000);
doc.cookie = n "=" escape(v) ";expires=" exp.toGMTString() ';path=/';
},
//获取cookie
getCookie:function(n){
var arr = doc.cookie.match(new RegExp("(^| )" n "=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]);
return null;
}
});
})(document,window);

代码如下:

//事件绑定
bind: function () {
if (win.addEventListener) {
return function(elem, sType, fnc) {
elem.addEventListener(sType, fnc, false);
};
} else if (win.attachEvent) {
return function(elem, sType, fnc) {
elem.attachEvent("on" sType, fnc);
};
} else {
return function(){};
}
}(),
//解除事件绑定
unbind: function(elem, sType, fnc){
if(elem.removeEventListener){
elem.removeEventListener(sType, fnc, false);
}else if(elem.detachEvent){
elem.detachEvent("on" sType, fnc);
}else{
elem["on" sType] = null;
}
},
//禁止事件冒泡
stopPropagation: function(ev) {
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
},
//禁止私下认可事件动作
preventDefault: function(ev) {
if (ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
}
},
//获取鼠标地点
getXY: function(ev){
return {
x:ev.pageX ? ev.pageX : ev.clientX docelem.scrollLeft,
y:ev.pageY ? ev.pageY : ev.clientY docelem.scrollTop
};
},
//绑定拖动事件
drag: function (obj, obj2){//obj:移动的靶子 obj2:拖动点
obj2 = obj2 || obj; //假如不设拖动点,那么拖动点即移动的对象
var x, y, ut = this;
obj2.onmousedown = function(e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
x = ut.getXY(e).x - parseInt(obj.style.left);
y = ut.getXY(e).y - parseInt(obj.style.top);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
obj.style.left = ut.getXY(e).x - x "px";
obj.style.top = ut.getXY(e).y - y "px";
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
}
},
//绑定横向滚动事件
sliderX : function (obj,x1,x2,overEvent,upEvent){
var x, t , ut = this;
obj.onmousedown = function (e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
t = ut.getXY(e).x - parseInt(obj.style.left);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
x = ut.getXY(e).x - t;
if(x<x1) x=x1;
if(x>x2) x=x2;
obj.style.left = x "px";
overEvent && overEvent(x);
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
upEvent && upEvent(x);
}
},
//绑定竖向滚动事件
sliderY : function (obj,y1,y2,overEvent,upEvent){
var y, t , ut = this;
obj.onmousedown = function (e){
e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture();
t = ut.getXY(e).y - parseInt(obj.style.top);
docelem.onmousemove = over;
docelem.onmouseup = up;
}
function over(e){
e = e || win.event;
y = ut.getXY(e).y - t;
if(y<y1) y=y1;
if(y>y2) y=y2;
obj.style.top = y "px";
overEvent && overEvent(y);
}
function up(){
obj.releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup = null;
upEvent && upEvent(y);
}
},
//设置cookie
setCookie:function(n, v, t){
var exp = new Date();
exp.setTime(exp.getTime() (t||24)*60*60*1000);
doc.cookie = n "=" escape(v) ";expires=" exp.toGMTString() ';path=/';
},
//获取cookie
getCookie:function(n){
var arr = doc.cookie.match(new RegExp("(^| )" n "=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]);
return null;
}
});
})(document,window);

为此,JS也得做相应的修改。

//日期字符串格转日期
App.parseDate = function(date){
var dt = date instanceof Date ? date: Date(date.replace("-","/"));
return isNaN(dt.getTime()) ? null : dt ;
};
//Json字符串转对象
App.parseJSON = function(jsonString) {
var result = false;
try {
result = eval('(' jsonString ')');
}catch (e) {};
return result;
};
//取不重复唯一值
App.getUid = function(){
return "uid" (new Date()).getTime() parseInt(Math.random()*100000);
};
//获取钦命范围的随机数
App.random = function (n1, n2){
return Math.floor(Math.random()*(n2-n1 1)) n1;
};
//秒变换为微秒
App.s2ms = function (str){
var t = str.split(":");
return t[0] * 60000 t[1] * 1000;
};
//微秒转变为秒
App.ms2s = function (ms){
return (ms/60000 ":" ms/1000`).replace(/.d /g,"").replace(/(^|:)(d)(?!d)/g,"$10$2");
};
//数字转变为编号
App.num2number = function (num, n){
return Array(n).join("0").concat(num).slice(-n);
};
//数字转化为华语
App.num2gb = function (n){
return "零一二三四五六七八九".split("")[n];
};
//Flash生成代码
App.getFlash = function (url, width, height, param){
var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};
if (this.isIE){
tagName = "object ";
o1.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
o1.codebase = "";
o2.movie = url;
o2.quality = "high";
param && this.extend(o2, param);
}else{
tagName = "embed ";
o1.type = "application/x-shockwave-flash";
o1.pluginspage = "";
o1.src = url;
o1.quality = "high";
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('<param name="' i '" value="' o2[i] '" />');
return '<' tagName a1.join(' ') '>' a2.join('') '</' tagName '>';
};
//播放器生成代码
App.getPlayer = function (url, width, height, param){
var wmp = ["6bf52a52-394a-11d3-b153-00c04f79faa6","application/x-mplayer2"];
var rmp = ["CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA","audio/x-pn-realaudio-plugin"];
var mp = /.rm$/.test(url) ? rmp : wmp;
var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};
if (this.isIE){
tagName = "object ";
o1.classid = "clsid:" mp[0];
o2.url = url;
param && this.extend(o2, param);
}else{
tagName = "embed ";
o1.type = mp[1];
o1.src = url;
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('<param name="' i '" value="' o2[i] '" />');
return '<' tagName a1.join(' ') '>' a2.join('') '</' tagName '>';
};
//获取XMLHttp对象
App.xmlhttp = function (){
if (this.isFF) return new XMLHttpRequest();
var a = ["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.5.0"];
for (var i=0,l=a.length;i<l;i ){
try{
return new ActiveXObject(a[i]);
}catch(e){}
}
return false;
};
//Get数据
App.get = function (url,callBack){
var x = this.xmlhttp();
x.open("get",url,true);
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(null);
};
//Post数据
App.post = function (url,arg,callBack){
var x = this.xmlhttp();
x.open("post",url,true);
x.setRequestHeader("Content-Length",arg.length);
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(arg);
};

<div class="hide">
<!-- contextmenu 钦命了采纳哪个上下文菜单。 -->
<!-- !!!不知情干什么,小编的浏览器上那个配置不起功效。 -->
<section contextmenu="mymenu" style="min-height:100px;min-height:200px;background:#999;">
<h1>点击此区域查看菜单</h1>
<!--
为了代码结构的明理解白,把menu成分放到了要采用的成分内部,其实您也足以放置外部的其余地点:
-->
<!-- 增多菜单,至于图片Logo,请自个儿安装。add the menu -->
<menu type="context" id="mymenu">
<menuitem label="刷新页面" onclick="window.location.reload();" icon=";
<menu label="分享到..." icon=";
<menuitem label="腾讯网博客园" icon="" onclick="window.location.href=';
<menuitem label="腾讯今日头条" icon="" onclick="window.location.href=';
</menu>
</menu>
</section>
</div>

//日期字符串格转日期
App.parseDate = function(date){
var dt = date instanceof Date ? date: Date(date.replace("-","/"));
return isNaN(dt.getTime()) ? null : dt ;
};
//Json字符串转对象
App.parseJSON = function(jsonString) {
var result = false;
try {
result = eval('(' jsonString ')');
}catch (e) {};
return result;
};
//取不另行唯一值
App.getUid = function(){
return "uid" (new Date()).getTime() parseInt(Math.random()*100000);
};
//获取内定范围的随便数
App.random = function (n1, n2){
return Math.floor(Math.random()*(n2-n1 1)) n1;
};
//秒转变为微秒
App.s2ms = function (str){
var t = str.split(":");
return t[0] * 60000 t[1] * 1000;
};
//微秒转变为秒
App.ms2s = function (ms){
return (ms/60000 ":" ms/1000`).replace(/.d /g,"").replace(/(^|:)(d)(?!d)/g,"$10$2");
};
//数字转变为编号
App.num2number = function (num, n){
return Array(n).join("0").concat(num).slice(-n);
};
//数字转化为华语
App.num2gb = function (n){
return "零一二三四五六七八九".split("")[n];
};
//Flash生成代码
App.getFlash = function (url, width, height, param){
var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};
if (this.isIE){
tagName = "object ";
o1.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
o1.codebase = "";
o2.movie = url;
o2.quality = "high";
param && this.extend(o2, param);
}else{
tagName = "embed ";
o1.type = "application/x-shockwave-flash";
o1.pluginspage = "";
o1.src = url;
o1.quality = "high";
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('<param name="' i '" value="' o2[i] '" />');
return '<' tagName a1.join(' ') '>' a2.join('') '</' tagName '>';
};
//播放器生成代码
App.getPlayer = function (url, width, height, param){
var wmp = ["6bf52a52-394a-11d3-b153-00c04f79faa6","application/x-mplayer2"];
var rmp = ["CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA","audio/x-pn-realaudio-plugin"];
var mp = /.rm$/.test(url) ? rmp : wmp;
var tagName = "", o1 = {width:width||1, height:height||1}, o2 = {};
if (this.isIE){
tagName = "object ";
o1.classid = "clsid:" mp[0];
o2.url = url;
param && this.extend(o2, param);
}else{
tagName = "embed ";
o1.type = mp[1];
o1.src = url;
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('<param name="' i '" value="' o2[i] '" />');
return '<' tagName a1.join(' ') '>' a2.join('') '</' tagName '>';
};
//获取XMLHttp对象
App.xmlhttp = function (){
if (this.isFF) return new XMLHttpRequest();
var a = ["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.5.0"];
for (var i=0,l=a.length;i<l;i ){
try{
return new ActiveXObject(a[i]);
}catch(e){}
}
return false;
};
//Get数据
App.get = function (url,callBack){
var x = this.xmlhttp();
x.open("get",url,true);
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(null);
};
//Post数据
App.post = function (url,arg,callBack){
var x = this.xmlhttp();
x.open("post",url,true);
x.setRequestHeader("Content-Length",arg.length);
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(arg);
};

因为fixed定位是基于浏览器的可视区进行定位的,所以本来给导航栏的固化都得退换。

有少许函数未经测试,接待大家提个意见

Element.dataset
数据集(dataset) API 允许开垦者对DOM成分设置(set)和获取(get) 以 data- 前缀开始的属性值。
代码如下:

有一丢丢函数未经测试,应接大家提个意见

复制代码 代码如下:

你大概感兴趣的篇章:

  • 用javascript实现包容IE7的类库 IE7_0_9.zip提供下载
  • 一实用的完结table排序的Javascript类库
  • JavaScript 应用类库代码
  • JavaScript类库D
  • Javascript类库的顶层对象名用户体验深入分析
  • stream.js 叁个相当的小、完全部独用立的Javascript类库
  • 5个最棒的Javascript日期管理类库分享
  • Moment.js 不容错过的超棒Javascript日期管理类库
  • javascript面向对象包装类Class封装类库分析
  • javascript拖拽上传类库DropzoneJS使用格局
  • JavaScript页面模板库handlebars的简要用法

代码如下:

代码如下: /*----------------------------------- Web Application JavaScript Library 2009.11 janchie ------------------------------------*/ //String原生对象扩充...

//记录导航条原本在页面上的地方
var naviga_offsetTop = 0;
var naviga_offsetLeft = 0;

<div id="intro" data-website="www.csdn.net" data-id="551996458" data-my-name="铁锚" data-blog-url=";

//IE7不识别getElementsByClassName,为了合作自定义二个
function my_getElementsByClassName(class_name) {
var el = [];
//获取具备因素
_el = document.getElementsByTagName('*');
//通过className刷选
for (var i=0; i<_el.length; i ) {
if (_el[i].className == class_name ) {
el[el.length] = _el[i];
}
}
return el;
}

代码如下:

//导航条,悬停在顶上部分
function naviga_stay_top(){
var a_navigation_bar = [];
if(document.getElementsByClassName){//Chrome, FF
a_navigation_bar = document.getElementsByClassName("navigation");
} else {//IE
a_navigation_bar = my_getElementsByClassName("navigation");
}
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

function testDataset(){
//
var intro = document.getElementById("intro");
// 注意那个不是 id属性哦,是 data-id 的值
var id = intro.dataset.id;
// data-website
var website = intro.dataset.website;
// data-blog-url,驼峰命名法..
var blogUrl = intro.dataset.blogUrl;
// data-my-name
var myName = intro.dataset.myName;
//
var msg = "qq:" id
",website:" website
",blogUrl:" blogUrl
",myName:" myName
;
//
warn(msg);
};

document.title = scrollTop;
//就算向下滚动的距离超越原本导航栏离顶上部分的距离
//直接将导航栏固定到可视区顶上部分
if( scrollTop > naviga_offsetTop ){
a_navigation_bar[0].style.top = 0 "px";
} else {
//假使向下滚动的偏离小原本导航栏离顶端的偏离,则另行计算导航栏的职位
a_navigation_bar[0].style.top = (naviga_offsetTop - scrollTop) "px";
}
}

从未什么好说的,和classList一样,简单却实用。(想一想,是或不是变动了后台和前台JS的一点交互以及解耦?)
window.postMessage API
IE8 已经补助 postMessage API 好几年了,此API允许window 和iframe 成分之间互相传递音讯。
跨域匡助啊。 代码如下:

//给导航条上多个tab,加上点击事件。
window.onload=function(){
var a_tabs = [];
if( document.getElementsByClassName ){//Chrome, FF
a_tabs = document.getElementsByClassName("tab");
}else{ //IE
a_tabs = my_getElementsByClassName("tab");
}

代码如下:

var a_contents = [];
if( document.getElementsByClassName ){//Chrome, FF
a_contents = document.getElementsByClassName("content");
}else{//IE
a_contents = my_getElementsByClassName("content");
}

// From window or frame on domain 1, send a message to the iframe which hosts another domain
var iframeWindow = document.getElementById("iframe").contentWindow;
iframeWindow.postMessage("Hello from the first window!");
// From inside the iframe on different host, receive message
window.addEventListener("message", function(event) {
// Make sure we trust the sending domain
if(event.origin == "") {
// Log out the message
console.log(event.data);
// Send a message back
event.source.postMessage("Hello back!");
}
]);
// message 只同意string 类型的数额,但是你能够运用 JSON.stringify 以及 JSON.parse 传递越多有含义的新闻。

//获取offsetLeft,即导航栏离左侧框的相距
var a_main_div = [];
if( document.getElementsByClassName ){//Chrome, FF
a_main_div = document.getElementsByClassName("main");
}else{ //IE
a_main_div = my_getElementsByClassName("main");
}
naviga_offsetLeft = a_main_div[0].offsetLeft;

autofocus Attribute
autofocus 属性确认保证当页面加载后,给定的 BUTTON,INPUT大概 TEXTAREA 元素能够活动获取主旨。

a_tabs[0].onclick=function(){
window.scrollTo(0, a_contents[2].offsetTop);
}
a_tabs[1].onclick=function(){
window.scrollTo(0, a_contents[3].offsetTop);
}
a_tabs[2].onclick=function(){
window.scrollTo(0, a_contents[4].offsetTop);
}
a_tabs[3].onclick=function(){
window.scrollTo(0, a_contents[5].offsetTop);
}

代码如下:

//获取页面上,导航条到最上端的职位
var a_navigation_bar = [];
if(document.getElementsByClassName){//Chrome, FF
a_navigation_bar = document.getElementsByClassName("navigation");
} else {//IE
a_navigation_bar = my_getElementsByClassName("navigation");
}
//获取offsetTop
naviga_offsetTop = a_navigation_bar[0].offsetTop;
a_navigation_bar[0].style.left = naviga_offsetLeft "px";

<input autofocus="autofocus" />
<button autofocus="autofocus">Hi!</button>
<textarea autofocus="autofocus"></textarea>

//给滚动条以及鼠标加上轮转事件
if( window.attachEvent) //IE
{
window.attachEvent("onmousewheel", naviga_stay_top);
window.attachEvent("onscroll", naviga_stay_top);

autofocus 属性首要用在轻便的输入页面,详细情形请参谋:autofocus 属性
各浏览器商家对那些API的支撑度各分裂样,所以在利用在此之前最棒检查实验一下包容性,花一些时日来读书方面所列出的API,您将会对他们询问和调节越来越多。
局地的测试代码如下:

document.attachEvent("onmousewheel", naviga_stay_top);
document.attachEvent("onscroll", naviga_stay_top);
} else {//Chrome ,FF
window.addEventListener("mousewheel", naviga_stay_top,false);
window.addEventListener("scroll", naviga_stay_top,false);

代码如下:

document.addEventListener("mousewheel", naviga_stay_top,false);
document.addEventListener("scroll", naviga_stay_top,false);
}
}

<!DOCTYPE html>
<html>
<head>
<title>5个你不清楚的 HTML5 API接口演示 </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="[email protected]">
<meta name="Description" content="original=;
<style>
.hide{ display:none}
.poplayer{ z-index:999; position:absolute;background-color:#fff; top:0px;left:0px;overflow: hidden;width:100%;height:100%;opacity:1;}
.close{ top:3px; right:10px;position:absolute;}
</style>
<script>
// 展现警告音信
function warn(msg){
warn = warn || "三个未知警告!";
if(window.console){
console.warn(msg);
} else {
alert(msg);
}
};
// 使用classList属性(Dom元素,css类名)
function toggleClassList(element,cName){
// 1. classList API
// 切换类,有则移除,未有则增进
if(element.classList.toggle){
element.classList.toggle(cName);
return true;
}
// !!! 其实,本函数 toggleClassList 借使援救的话,
// 那么上边的代码就不会被实行,此处仅作示范,请灵活应用
// 2. classList API
// element 的class属性是还是不是含有 hide 这么些CSS类
var hasHide = element.classList.contains(cName);
//
if(hasHide){
// 3. classList API
// 移除hide类
element.classList.remove(cName);
} else {
// 4. classList API
// 添加hide类
element.classList.add(cName);
}
return true;
};
// 使用className属性(Dom元素,css类名)
function toggleClassName(element,cName){
var className = element.className || "";
// 去掉首尾的空白
cName = cName.replace(/^s*|s*$/g,"");
// cName 中间借使带有空白字符,则退步. 借使要美貌处理,可以拆分为数组,单个管理
var blankReg = /s /;
if(blankReg.test(cName)){
warn("'" cName "'中间含有空白字符");
return false;
}
// 正则, b 代表可知三番五次字符的界线,可以如此清楚:
// "hide2 hide hide myname" 那么,
// hide2 的光景各有三个虚构的b ,hide 前后也可能有,
// 可是 hi 和 de之间则尚未。
// g 表示单行全局
//var rep = /bhideb/g;
var rep = new RegExp("\b" cName "\b", "g");
if(rep.test(className)){
className = className.replace(rep,"");
} else {
className = " " cName;
}
// 替换新className。
element.className = className;
return true;
};
// 函数,切换(元素id,className)
function toggleClass(elementId,cName){
// 获取三个DOM成分
var element = document.getElementById(elementId);
// 如若不存在成分
if(!element){
warn("id为" elementId "的因素不设有");
return false;
}
if(!element.classList){
warn("id为" elementId "的因素不补助classList属性,将选拔任何手腕来达成");
return toggleClassName(element,cName);
} else {
return toggleClassList(element,cName);
}
};
function testDataset(){
//
var intro = document.getElementById("intro");
// 注意这么些不是 id属性哦,是 data-id 的值
var id = intro.dataset.id;
// data-website
var website = intro.dataset.website;
// data-blog-url,驼峰命名法..
var blogUrl = intro.dataset.blogUrl;
// data-my-name
var myName = intro.dataset.myName;
//
var msg = "qq:" id
",website:" website
",blogUrl:" blogUrl
",myName:" myName
;
//
warn(msg);
};
// dom加载后 执行
window.addEventListener("DOMContentLoaded", function() {
var open = document.getElementById("open");
var close = document.getElementById("close");
open.addEventListener("click",function(){
//
toggleClass("diary2","hide");
toggleClass("loading","hide");
});
close.addEventListener("click",function(){
//
toggleClass("diary2","hide");
toggleClass("loading","hide");
});
//
testDataset();
}, false);
</script>
</head>
<body>
<div>
<div id="diary2" class="diary poplayer hide">
<a href="javascript:void(0)" _fcksavedurl=""javascript:void(0)"" id="close">关闭</a>
<div id="loading" class="loading hide" style="z-index:1; position: absolute; left: 40%; top: 30%; width: 104px; height: 104px;opacity: 0.5;background: #000000;border: 0px solid #000000;border-radius: 10px;-webkit-border-radius: 10px;">
<img src="" alt=""
style="position:absolute; left:26px; top:10px;width: 50px;height: 50px;border-radius: 10px;-webkit-border-radius: 10px;">
<div class="loadingtext" style="position:absolute;left: 12px;top: 76px;color: #ffffff;">正在加载中</div>
</div>
</div>
<div>
<a href="javascript:void(0)" id="open">打开</a>
</div>
</div>
<div class="hide">
<!-- contextmenu 钦点了接纳哪个上下文菜单。 -->
<!-- !!!不知道干什么,笔者的浏览器上那么些配置不起成效。 -->
<section contextmenu="mymenu" style="min-height:100px;min-height:200px;background:#999;">
<h1>点击此区域查看菜单</h1>
<!--
为了代码结构的显著,把menu成分放到了要接纳的成分内部,其实您也足以放置外部的其余地方:
-->
<!-- 增加菜单,至于图片Logo,请本人设置。add the menu -->
<menu type="context" id="mymenu">
<menuitem label="刷新页面" onclick="window.location.reload();" icon=";
<menu label="分享到..." icon=";
<menuitem label="今日头条今日头条" icon="" onclick="window.location.href=';
<menuitem label="腾讯新浪" icon="" onclick="window.location.href=';
</menu>
</menu>
</section>
</div>
<div id="intro" data-website="www.csdn.net" data-id="551996458" data-my-name="铁锚" data-blog-url=";
</body>
</html>

在那么些难点中,通晓CSS DIV定位(relative,absolute,static,fixed)的区别很入眼。

relative,absolute,static,fixed

先看下各样属性值的概念:

1、static:暗许值。未有稳固,成分出现在例行的流中(忽略 top, bottom, left, right 恐怕 z-index 申明)。

2、relative:生成绝对固化的成分,通过top,bottom,left,right的安装相对于其平常职责举行定点。可透过z-index实行档期的顺序分级。

3、absolute:生成相对定位的因素,相对于 static 定位以外的率先个父成分进行定点。成分的地方通过 "left", "top", "right" 以及 "bottom" 属性实行规定。可透过z-index进行档次分级。

4、fixed:生成相对定位的因素,绝对于浏览器窗口进行固定。成分的地点通过 "left", "top", "right" 以及 "bottom" 属性进行规定。可由此z-index举行档期的顺序分级。

static与fixed的固化情势较好驾驭,在此不做解析。下面对采纳的较多的relative和absolute举行深入分析:

1、relative。定位为relative的因素脱离符合规律的文本流中,但其在文本流中的地方照旧留存。如图1:
澳门新浦京娱乐场网站 3
图1
卡其色背景的层定位为relative,黄色边框区域为其在符合规律流中的地方。在经过top、left对其稳住后,从深中蓝背景层的职位能够阅览其常规地方照样留存。

2、absolute。定位为absolute的层脱离平时文本流,但与relative的分歧是其在符合规律流中的地方不在存在。如图2:
澳门新浦京娱乐场网站 4
图2
能够看出,在将鹅黄背景层定位为absolute后,青莲背景层自动补上。

3、relative与absolute的主要差别:

先是,是地方已经涉及过的在平常流中的地方存在与否。

说不上,relative定位的层连接相对于其近日的父成分,无论其父成分是何种定位格局。如图3:
澳门新浦京娱乐场网站 5
图3
图中,珍珠白背景层为relative定位,其一直父元素巴黎绿背景层为私下认可的static定位。深藕红背景层的岗位为相对深蓝背景层top、left个20成分。而只要玛瑙红背景层定位为absolute,则意况如图4:
澳门新浦京娱乐场网站 6
图4
可以见见,浅深青莲背景层还是定义top:20px;left:20px;但其相对的要素变为定位格局为absolute或relative的艳情背景层。因而,对于absolute定位的层连接相对于其多年来的概念为absolute或relative的父层,而那一个父层并不一定是其一直父层。假若其父层中都未定义absolute或relative,则其将相对body进行固定,如图5:
澳门新浦京娱乐场网站 7
图5
除top、left、right、bottom定位外,margin属性值的概念也顺应上述规则。

您或者感兴趣的稿子:

  • Fullpage.js固定导航栏-完毕稳固导航栏
  • 一步步教我们编写炫丽的领航栏js css完结
  • js导航栏单击事件背景调换示例代码
  • JS 实现导航栏悬停作用(续2)
  • JS 达成导航栏悬停成效
  • javascript 禁止使用IE工具栏,导航栏等等完结代码
  • JavaScript NodeTree导航栏(菜单项JSON类型/自制)
  • JS滚动到内定地点导航栏固定顶上部分

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:澳门新浦京娱乐场网站:响应式增强设计,实现