javascript+HTML交互事件

JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。

事件流

事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层的div先出发click事件还是外层先触发?目前主要有三种模型

IE的事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素Netscape的事件捕获:不太具体的节点更早接收事件,而最具体的元素最后接收事件,和事件冒泡相反

DOM事件流:DOM2级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡句阶段。

Opera、Firefox、Chrome、Safari都支持DOM事件流,IE不支持事件流,只支持事件冒泡如有以下html,点击div区域

复制代码代码如下:

Test Page

Click Here

事件处理程序(handler)

我们也称之为事件侦听器(listener),事件就是用户或浏览器自身执行的某种动作。比如click、load、moseover等,都是事件类型(俗称事件名称),而响应某个事件的方法就叫做事件处理程序或者事件监听器或者事件句柄,事件处理程序名字是:on+事件类型。

了解了这些,我们看看如何给元素添加事件处理程序

HTML事件处理程序元素支持的每个事件都可以使用一个相应事件处理程序同名的HTML属性指定。这个属性的值应该是可以执行的JavaScript代码,我们可以为一个button添加 cl ick事件处理程序

复制代码代码如下:

在HTML事件处理程序中可以包含要执行的具体动作,也可以调用在页面其它地方定义的脚本,刚才的例子可以写成这样

复制代码代码如下:

这样处理,事件处理程序被认为是元素的方法,事件处理程序在元素的作用域下运行,thi s就是当前元素,所以点击button结果是:btnClick

这样还有一个好处,我们可以删除事件处理程序,只需把元素的onclick属性赋为null即可

DOM2事件处理程序DOM2级事件定义了两个方法用于处理指定和删除事件处理程序的操作:addEventListener和removeEventListener。所有的DOM节点都包含这两个方法,并且它们都接受三个参数:事件类型、事件处理方法、一个布尔值。最后布尔参数如果是true表示在捕获阶段调用事件处理程序,如果是false,则是在事件冒泡阶段处理。

刚才的例子我们可以这样写

复制代码代码如下:

上面代码为button添加了click事件的处理程序,在冒泡阶段触发,与上一种方法一样,这个程序也是在元素的作用域下运行,不过有一个好处,我们可以为click事件添加多个处理程序

复制代码代码如下:

这样两个事件处理程序会在用户点击button后按照添加顺序依次执行。

通过addEventListener添加的事件处理程序只能通过removeEventListener移除,移除时参数与添加的时候相同,这就意味着刚才我们添加的匿名函数无法移除,因为匿名函数虽然方法体一样,但是句柄却不相同,所以当我们有移除事件处理程序的时候可以这样写

复制代码代码如下:

下面就是老生常谈的IE兼容性问题了。。。

IE并不支持addEventListener和removeEventListener方法,而是实现了两个类似的方法attachEvent和detachEvent,这两个方法都接收两个相同的参数,事件处理程序名称和事件处理程序方法,由于IE指支持事件冒泡,所以添加的程序会被添加到冒泡阶段。

使用attachEvent添加事件处理程序可以如下

复制代码代码如下:

结果是undefined,很奇怪,一会儿我们会介绍到

使用attachEvent添加的事件处理程序可以通过detachEvent移除,条件也是相同的参数,匿名函数不能被移除。

复制代码代码如下:

跨浏览器的事件处理程序

前面内容我们可以看到,在不同的浏览器下,添加和移除事件处理程序方式不相同,要想写出跨浏览器的事件处理程序,首先我们要了解不同的浏览器下处理事件处理程序的区别

在添加事件处理程序事addEventListener和attachEvent主要有几个区别

1. 参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加的事件处理程序只能发生在冒泡阶段,addEventListener第三个参数可以决定添加的事件处理程序是在捕获阶段还是冒泡阶段处理(我们一般为了浏览器兼容性都设置为冒泡阶段)

2. 第一个参数意义不同,addEventListener第一个参数是事件类型(比如click,load),而attachEvent第一个参数指明的是事件处理函数名称(onclick,onload)

3. 事件处理程序的作用域不相同,addEventListener得作用域是元素本身,this是指的触发元素,而attachEvent事件处理程序会在全局变量内运行,this是window,所以刚才例子才会返回undefined,而不是元素id

4. 为一个事件添加多个事件处理程序时,执行顺序不同,addEventListener添加会按照添加顺序执行,而attachEvent添加多个事件处理程序时顺序无规律(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器

了解了这四点区别后我们可以尝试写一个浏览器兼容性比较好的添加事件处理程序方法

复制代码代码如下:

function addEvent(node, type, handler) {

if (!node) return false;

if (node.addEventListener) {

node.addEventListener(type, handler, false);

return true;

}

else if (node.attachEvent) {

node.attachEvent('on' + type, handler, );

return true;

}

return false;

}

这样,首先我们解决了第一个问题参数个数不同,现在三个参数,采用事件冒泡阶段触发,第二个问题也得以解决,如果是IE,我们给type添加上on,第四个问题目前还没有解决方案,需要用户自己注意,一般情况下,大家也不会添加很多事件处理程序,试试这个方法感觉很不错,但是我们没有解决第三个问题,由于处理程序作用域不同,如果handler内有t his之类操作,那么就会出错在IE下,实际上大多数函数都会有this操作。

复制代码代码如下:

function addEvent(node, type, handler) {

if (!node) return false;

if (node.addEventListener) {

node.addEventListener(type, handler, false);

return true;

}

else if (node.attachEvent) {

node.attachEvent('on' + type, function() { handler.apply(node); });

return true;

}

return false;

}

这样处理就可以解决this的问题了,但是新的问题又来了,我们这样等于添加了一个匿名的事件处理程序,无法用detachEvent取消事件处理程序,有很多解决方案,我们可以借鉴大师的处理方式,jQuery创始人John Resig是这样做的

复制代码代码如下:

function addEvent(node, type, handler) {

if (!node) return false;

if (node.addEventListener) {

node.addEventListener(type, handler, false);

return true;

}

else if (node.attachEvent) {

node['e' + type + handler] = handler;

node[type + handler] = function() {

node['e' + type + handler](window.event);

};

node.attachEvent('on' + type, node[type + handler]); return true;

}

return false;

}

在取消事件处理程序的时候

复制代码代码如下:

function removeEvent(node, type, handler) {

if (!node) return false;

if (node.removeEventListener) {

node.removeEventListener(type, handler, false); return true;

}

else if (node.detachEvent) {

node.detachEvent('on' + type, node[type + handler]); node[type + handler] = null;

}

return false;

}

John Resig很巧妙地利用了闭包,看起来很不错。

事件对象

在触发DOM上的某个事件的时候会产生一个事件对象event,这个对象包含着所有与事件有关的信息,包括产生事件的元素、事件类型等相关信息。所有浏览都支持event对象,但支持方式不同。

DOM中的事件对象兼容DOM的浏览器会产生一个event对象传入事件处理程序中。应用一下刚才我们写的addEvent方法

复制代码代码如下:

varbtnClick = document.getElementById('btnClick');

addEvent(btnClick, 'click', handler);

点击button的时候我们可以看到弹出内容是click的弹窗

event对象包含与创建它的特定事件有关的属性和方法,触发事件的类型不同,可用的属性和方法也不同,但是所有事件都会包含

在事件处理程序内部,this始终等同于currentTarget,而target是事件的实际目标。要阻止事件的默认行为,可以使用preventDefault()方法,前提是cancelable值为tru e,比如我们可以阻止链接导航这一默认行为

复制代码代码如下:

document.getElementsByTagName('a').onclick = function (e) {

e.preventDefault();

}

stopPaopagation()方法可以停止事件在DOM层次的传播,即取消进一步的事件捕获或冒泡。我们可以在button的事件处理程序中调用stopPropagation()从而避免注册在body上的事件发生

复制代码代码如下:

var handler = function (e) {

alert(e.type);

e.stopPropagation();

}

addEvent(document.body, 'click', function () { alert('Clicked body')}); varbtnClick = document.getElementById('btnClick');

addEvent(btnClick, 'click', handler);

若是注释掉e.stopPropagation(); 在点击button的时候,由于事件冒泡,body的click 事件也会触发,但是调用这句后,事件会停止传播。

IE中的事件对象访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。直接为DOM元素添加事件处理程序时,event对象作为window对象的一个属性存在

复制代码代码如下:

var handler = function () {

var e = window.event;

alert(e.type);

}

varbtnClick = document.getElementById('btnClick');

btnClick.onclick = handler;

我们通过window.event取得了event对象,并检测到了其类型,可是如果事件处理程序是通过attachEvent添加的,那么就会有一个event对象被传入事件处理程序中

复制代码代码如下:

var handler = function (e) {

alert(e.type);

}

varbtnClick = document.getElementById('btnClick');

attachEvent(btnClick, handler);

当然这时候也可以通过window对象访问event,方便起见,我们一般会传入event对象,I E中所有的事件都包含以下属性方法

跨浏览器的事件对象虽然DOM和IE的event对象不同,但基于它们的相似性,我们还是可以写出跨浏览器的事件对象方案

复制代码代码如下:

functiongetEvent(e) {

return e || window.event;

}

functiongetTarget(e) {

return e.target || e.scrElement;

}

functionpreventDefault(e) {

if (e.preventDefault)

e.preventDefault();

else

e.returnValue = false;

}

functionstopPropagation(e) {

if (e.stopPropagation)

e.stopPropagation();

else

e.cancelBubble = true;

}

常用HTML事件

有一些HTML事件我们会经常用到,这些事件不一定与用户操作有关,如果用dreamweaver 编辑器,HTML控件属性自动提示里面会出现。

1.load:当页面完全加载后在window上触发,当图像加载完成后在img元素上触发,或当嵌入内容加载完成时,在object元素上触发

2.unload:页面完全卸载后在window上触发,或嵌入内容卸载后在object元素触发

3.select:用户选择文本框中的字符时触发

4.change:文本框焦点变化后其值改变时触发

5.submit:用户提交表单的时候触发

6.resize:窗口或框架大小变化的时候在window上触发

7.scrool:用户滚动带滚动条的元素时,在该元素上触发

8.focus:页面或元素获得焦点时在window及相应元素上触发

9.blur:页面或元素失去焦点时在window及相应元素上触发

10.beforeunload:页面卸载前在window上触发

11.mousewheel:不算HTML的,当用户通过鼠标滚轮与页面交互,在垂直方向滚动页面时触发

响应式网页设计的基础

By Emily P. Lewis翻译: 亓光宇 在过去的一年里,如果你不是住在深山里,就一定知道响应式网页设计,它已经成为当今的主流。响应式设计是Ethan Marcotte提出的,概念很简单:使网站的页面布局能够根据不同设备和分辨率进行自动调整。 当我第一次了解到它时,我就立即被迷住了--特别是media queries,我马上就用到我自己的个人兼职网站上。我甚至写了一篇文章介绍《如何使用CSS3 Media Queries响应不同设备》(强烈建议在读这篇文章之前读一下)。 在第一次尝试使用media queries后,我很快意识到我忽略了一个响应式设计的重点:灵活性。 挑战固定宽度 我的个人兼职网站使用了固定宽度的设计,所有的width, margin和padding都使用了固定的像素值。我一般都会这样写网站,因为对我来说它更 简单,更快速。 但当我试图在我的固定宽度的网站上应用media queries的时候,那些简单和快速的优势全部都消失了。为什么?因为对于固定宽度的设计,我需要非常细致的定义media queries并在CSS文件中调整每个单独的像素值,基本上,我需要为每一种可能的分辨率都设计一个全新的布局,繁琐!慢!!还不好玩!!! 我有幸听了Marcotte先生在《In Control 2011》的演讲,他讨论了响应式设计的理论和最佳实践,诸如fluid grid(流体网格)实现方式。 流动且灵活的公式 流动式布局是灵活的。由于width,margin和padding(甚至字体和图像)使用了百分比和em(相对长度单位),因此页面布局会随着浏览器的窗口变化而变化。随着分辨率的改变,布局会成比例地进行调整,实现过程中不需要用到任何media query。 这对于实现响应式网页设计来说简直太美妙了。如果我有一个基于比例值的布局,流动式的网格将替我完成大部分繁重的工作。我的media query将不再需要包含那些覆盖其他分辨率的所有width, margin和padding的样式定义。 但是也有一点让我感到头疼,计算流动式网格的比例宽度需要用到一些数学知识,我数学不太好… 幸运的是, Ethan 提供了一个很简单(即便对我来说)的公式来计算比例宽度:

iOS中的键盘事件

iOS中的键盘事件 键盘事件 在涉及到表单输入的界面中,我们通常需要监听一些键盘事件,并根据实际需要来执行相应的操作。如,键盘弹起时,要让我们的UIScrollView自动收缩,以能看到整个UIScrollView的内容。为此,在UIWindow.h中定义了如下6个通知常量,来配合键盘在不同时间点的事件处理: 1.UIKeyboardWillShowNotification // 键盘显示之前 2.UIKeyboardDidShowNotification // 键盘显示完成后 3.UIKeyboardWillHideNotification // 键盘隐藏之前 4.UIKeyboardDidHideNotification // 键盘消息之后 5.UIKeyboardWillChangeFrameNotification // 键盘大小改变之前 6.UIKeyboardDidChangeFrameNotification // 键盘大小改变之后 7. 8.这几个通知的object对象都是nil。而userInfo字典都包含了一些键盘的信息,主要是键 盘的位置大小信息,我们可以通过使用以下的key来获取字典中对应的值:9. 10.// 键盘在动画开始前的frame 11.let UIKeyboardFrameBeginUserInfoKey: String 12. 13.// 键盘在动画线束后的frame 14.let UIKeyboardFrameEndUserInfoKey: String 15. 16.// 键盘的动画曲线 17.let UIKeyboardAnimationCurveUserInfoKey: String 18. 19.// 键盘的动画时间 20.let UIKeyboardAnimationDurationUserInfoKey: String 在此,我感兴趣的是键盘事件的调用顺序和如何获取键盘的大小,以适当的调整视图的大小。 从定义的键盘通知的类型可以看到,实际上我们关注的是三个阶段的键盘的事件:显示、隐藏、大小改变。在此我们设定两个UITextField,它们的键盘类型不同:一个是普通键盘,一个是数字键盘。我们监听所有的键盘事件,并打印相关日志(在此就不贴代码了),直接看结果。 1) 当我们让textField1获取输入焦点时,打印的日志如下:

世界史重大事件时间表(完整版)

大学世界史重大事件时间表(完整版)适用于大学、高中、初中生 世界历史大事年表 大约三百万年前地球上出现人类 公元前3100年左右埃及形成统一的奴隶制国家 公元前3000年左右 两河流域出现奴隶制城市国家 公元前3000年代中期印度河流域哈拉帕文化 公元前2100年左右 埃及奴隶河贫民大起义 公元前1894年古巴比伦王国建立 公元前1000年左右努比亚建立奴隶制国家 公元前594年雅典的梭伦改革 公元前六世纪居鲁士统一波斯,佛教在印度产生 公元前539年 波斯占领巴比伦 公元前525年波斯灭埃及 公元前509年罗马成立贵族专政的奴隶制共和国 公元前330年波斯被马其顿灭亡 公元前三世纪摩揭陀国统一印度大部分地区 公元前73-71年 斯巴达克起义 公元前27年屋大维建立罗马的元首制,共和国转为帝国公元前后朝鲜半岛出现高句丽奴隶制国家 公元初东非阿克苏姆奴隶制国家兴起 公元一世纪基督教产生 公元三世纪日本大和奴隶制国家兴起 313年基督教在罗马取得合法地位 四世纪北非发生“阿哥尼斯特”运动 378年 西哥特人在阿德里亚堡击败罗马军队 395年罗马分裂为东西两部 410年西哥特人一度占领罗马 476年西罗马帝国灭亡,西欧奴隶制度崩溃 六世纪初法兰克王国建立 622年 穆罕默德从麦加出走麦地拉,伊斯兰教纪元 八世纪中叶阿拉伯帝国形成 646年日本大化改新 676年 新罗统一朝鲜

九世纪早期英吉利王国形成 843年查里曼帝国分裂,法兰西、德意志、意大利雏形产生九世纪封建制度在西欧确立 962年神圣罗马帝国建立 1054年基督教会分裂 1066年 法国诺曼底公爵征服英国 十一世纪中叶加纳王国全盛时期 1192年日本幕府政治建立 十三世纪 埃塞俄比亚封建国家兴起 十四世纪马里王国全盛时期,意大利出现资本主义萌芽 十四至十六世纪欧洲文艺复兴运动 1337年英法百年战争开始 1358年法国农民起义 1381年英国瓦特。泰勒起义 1453年东罗马帝国灭亡,英法百年战争结束 十五世纪桑海兴起 十五世纪晚期 英法中央集权国家形成,圈地运动开始 1480年俄罗斯摆脱蒙古控制 1487年迪亚士到达好望角 1492年哥伦布初次航行到美洲 1497-1498年达加马开辟西欧到印度的新航路 1517年 马丁。路德发动宗教改革 1519-1522年麦哲伦船队环航地球 十六世纪 葡萄牙和西班牙殖民者在亚、美强占殖民地 1524-1525 德意志农民起义 1588年 英国海军击败西班牙“无敌舰队” 1592-1598年朝鲜军民抗击日本侵略的卫国战争 1600年 英国东印度公司建立 十七世纪初法国殖民者开始在北美拓殖 1607年英国殖民者开始在北美拓殖 1632年沙俄在西伯利亚修建侵略扩张的基地—雅库次克1640年英国资产阶级革命开始 1649年 英国王查理一世被处死 1660年英国斯图亚特王朝复辟 1688年英国政变,资产阶级和新贵族的统治确立 1689年中俄签定“尼布楚条约”

51CTO下载-yui+3.0+学习笔记

YUI 3 学习笔记(1)-YUI Global对象 YUI模块是YUI3中的单一核心,所有需要使用YUI3的页面都必须包含该 模块,该模块提供加载功能,可以使用该功能动态加载指定模块,其依 赖模块会被自动加载,所以YUI模块可以看成YUI的一个种子。 YUI模块创建了一个全局对象:YUI,一个页面可以共享一个YUI实例,也 可以使用多个实例。 1 要使用YUI全局对象,只需添加如下引用: Html代码 2 如果你想要使用拖放和动画功能,可以使用use()方法加载: Javascript代码 该方法的最后一个参数是一个回调函数,该函数在完成所有指定模块的加载 后被调用,调用时传递一个参数:一个YUI的实例。 3 YUI全局对象有一个Lang对象,其中没有设什么新鲜东西,就是javascript 语言 本身的一些功能,但是在这里做了一个统一以便于使用: Javascript代码 YUI 3 学习笔记(2)- Node Node是用来操作DOM node的工具,实际上每一个Node实例都代表着一个DOM node,每一 个NodeList都代表着一组DOM node. 从YUI2.x到YUI3.0相关的api发生了一些变化,具体可以参见本文的最后部分。 1. 要使用Node,首先要引入YUI3的种子文件: Html代码

然后加载相应模块: Javascript代码 2. 获得Node 可以使用YUI.one()获取Node,该方法的参数可以是一个Node,也可以是一个选择器(selector), 在使用选择器时,返回第一个匹配的元素。默认情况下css3选择器不被支持,如果要使用,需要 加载“selector-css3”模块。关于css3 selector可以参见这里: https://www.360docs.net/doc/5819006759.html,/TR/css3-selectors 以下是使用YUI.one()的例子: Javascript代码 3. 访问Node属性 可以使用Node的set,get方法访问Node的属性,需要注意的是如果返回节点的话返回的是 YUI Node而不是DOM node,这一点在其他地方也要注意。 以下是相关的例子: Javascript代码 4. 事件监听 可以用on方法添加事件监听器: Javascript代码 5. DOM方法 Y.Node提供了所有DOM node的原有方法

Python中使用PyHook监听鼠标和键盘事件实例

Python中使用PyHook监听鼠标和键盘事件实例 PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件。这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台。关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用 ?123456789101112131415161718192021222324252627282930 313233343536373839404142434445464748495051525354555 6 # -*- coding: utf-8 -*- # 3import pythoncom 4import pyHook 5def onMouseEvent(event): # 监听鼠标事件print "MessageName:",event.MessageName print "Message:", event.Message print "Time:", event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Position:", event.Position print "Wheel:", event.Wheel print "Injected:", event.Injected print"---" # 返回

True 以便将事件传给其它处理程序# 注意,这儿如果返回False ,则鼠标事件将被全部拦截# 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了return True 23def onKeyboardEvent(event): # 监听键盘事件print "MessageName:", event.MessageName print "Message:", event.Message print "Time:", event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Ascii:", event.Ascii, chr(event.Ascii) print "Key:", event.Key print "KeyID:", event.KeyID print "ScanCode:", event.ScanCode print "Extended:", event.Extended print "Injected:", event.Injected print "Alt", event.Alt print "Transition", event.Transition print "---" # 同鼠标事件监听函数的返回值return True 42def main(): # 创建一个“钩子”管理对象hm = pyHook.HookManager() # 监听所有键盘事件 hm.KeyDown = onKeyboardEvent # 设置键盘“钩子”hm.HookKeyboard() # 监听所有鼠标事件 hm.MouseAll = onMouseEvent # 设置鼠标“钩子”hm.HookMouse() # 进入循环,如不手动关闭,程序将一直处于监听状态pythoncom.PumpMessages() 56if __name__ == "__main__": main()

Java+Swing+常用事件和监听器接口

Swing 常用事件和监听器接口 AncestorEvent AncestorListener ancestorAdded(AncestorEvent e) ancestorMoved(AncestorEvent e) ancestorRemoved(AncestorEvent e) CaretEvent 通知感兴趣的参与者事件 源中的文本插入符已经发 生更改 CaretListener caretUpdate(CareEvente) ChangeEvent 通知感兴趣的参与者事件 源中的状态已经发生更改 ChangeListener stateChanged(ChangeEvent e) HyperlinkEvent 通知感兴趣的参与者发生 了与超文本链接有关的事 情 HyperlinkListener hyperlinkUpdate(HyperlinkEvent e) InternalFrameEvent 以事件源的形式添加对J InternalFrame对象的支持的 A WTEvent InternalFrameListener internalFrameActivated(InternalFrameEvent e) internalFrameClosed(InternalFrameEvent e) internalFrameClosing(InternalFrameEvent e) internalFrameDeactived(InternalFrameEvent e) internalFrameDeiconified(InternalFrameEvent e) internalFrameIconified(InternalFrameEvent e) internalFrameOpened(InternalFrameEvent e) ListDataEvent 定义一个列表更改的事件ListDataListener contentsChanged(ListDataEvent e) intervalAdded(ListDataEvent e) intervalRemoved(ListDataEvent e)

响应式网页设计的七个技巧

响应式网页设计的七个技巧 响应式网页设计已经是如今当之无愧的标准配置了,我们需要响应式的技术来应对日渐碎片化的屏幕尺寸,网页设计师也力图做好这件事情。而网页中的图片和图库的响应式设计,也是其中的重点难点。它们是网页中最常见,也是最直观可见的元素。打开一个漂亮精致的网站,然而其中的图片和图库看起来怎么都和页面不匹配,这样的情况恐怕是最让人抓狂的了。 响应式网站 如果要设计好响应式的图片和图库,今天天极响应式网站专家聊聊成都响应式网页设计的七个技巧,兴许能给你提供一个明确而系统的思路。它们并不涉及到具体代码实现,更多牵涉到设计过程和处理手法,做好了这些工作,具体实现起来就不难了。 1、考虑高宽比桌面端的图片浏览体验和移动端是完全不同的,这一点毋庸置疑。对于绝大多数的网站而言,图片展示的位置都很相近,大同小异。而设计师的任务,是要确保网站随着屏幕和设备变化的时候,图片的展示不会在页面布局的伸缩变化过程中变得奇怪和失真。这个时候,就要始终牢记图片的高宽比,并且始终控制高宽比不会改变。回到桌面端网页中,大幅的背景图或者置于页面顶端的图片看起来非常漂亮,可是当它切换到移动端设备中的时候,首先屏幕比例和方

向就不同了,那么它是否还那么好看呢?图片被缩小之后,信息的呈现是否会丢失?它是否会被拉伸?这个时候,图片的高宽比的控制就显得特别重要了。控制原始图片不被拉伸,同时让图片所展示出来的部分的高宽比能够尽可能合理地匹配对应的屏幕,这样也就不必担心响应式断点过多,导致你需要上传过多的图片。 2、尺寸和比例的一致性响应式设计就不能不说断点。为了照顾不同的屏幕,我们需要将图片裁剪成不同比例不同尺寸的大小,而这也直接影响着整个设计与开发的设计流程。许多人仅仅只是将图片上传到CMS系统中,就希望它能以完美的样式呈现出来。这不现实。每张图片都应当被裁剪为合理的尺寸,并且放置在理想的位置上,确保它们会以用户期望的样子呈现出来。后端可能会在这件事情上花费相当的时间和精力,但是这些努力是值得的。 3、使用轮播图或者图库轮播图控件和图库控件是网站中最常见的图片载体,并且也可以更加自如的管理图片。尤其是当你使用了那些比较著名或者适配范围比较广的第三方控件的时候,控制图片元素的粗活重活基本上都会被这些控件接手过去。不过,我们之前提到的图片长宽比和尺寸大小的控制同样也是要注意的,否则一样会让网页的展示效果变尴尬。除此之外,你还需要什么场合使用什么样的控件。如果你拥有若干高品质的图片或者需要推荐特定的文章和专题,那么你需要使用幻灯片轮播图控件。如果你拥有大量有待展示的图片,可以缩小展示也不存在可读性问题的话,不妨使用图库类的控件来展示。许多作品集类的网站常常会使用图库控件。 4、尽量避免使用图片说明(Captions)虽然图片说明能够让你的图片的信息更加丰富,但是它会非常直接地影响到网页的运作。尽量避免使用它们,如果实在是需要,尽量用其他的方式来呈现。图片的Caption属性加入之后,确实能在桌面端拥有良好的渲染效果,但是小屏幕上常常问题不断。为了不让这些细小的可用性的问题影响用户体验,尽量避免使用就好了。因为这种小问题而让用户无法忍受并且离去,并不划算。 5、图片和视频混用要小心如果网站中同时存在图片和视频类的多媒体,用户和设计者应该都是能够接受的,甚至许多用户已经习惯了这样的设计。但是要注意的是,即便是在同一个页面中,也尽量不要让图片和视频同时存在于同一个控件或者区块中。也许这样看起来很炫酷,也许一部分图片和视频能够搭配起来,但是更多的视频和图片很难在尺寸上保持一致,导致总会有一部分图片或者视频会留下空白和间隙。最好的方案还是将两者分开展示,避免了媒体属性和尺寸上的差异与冲突。这几乎适用于任何设计元素,而图片和视频尤甚。 6、削减不必要的元素虽然轮播图和图库控件非常好用,但是许多设计师常常会往其中添加许多垃圾的内容,最常见的就是塞入一堆导航箭头、按钮、文本甚至行为召唤按钮。这样的例子不胜枚举。一般情况下,用户其实是熟知如何同轮播图这类控件进行交互的。除非你的设计和我们的认知有着巨大的差异,以至于必

Flex4.6事件监听机制的测试和总结-图文+源代码

Flex4.6事件监听机制的测试和总结 在Flex和Actionscript3中,事件的类型有很多,比如单击的click、鼠标移动的mouseEvent、改变大小等。开发人员需要注意的是,某个组件如何设置监听、发出事件,以及事件的响应操作。这种方式被称之为“事件驱动”方式。事件驱动涉及到的有关概念包括: 1、事件对象,即event object。所有的事件对象都是flash.events.Event或者其子类。每个事件对象都包含事件类型(type)和事件源(target),便于event listener知道事件的类型以及事件发出者。事件对象是Event类或者某个子类的实例,不但存储了有关特定事件的信息,还包括便于操作事件对象的方法。 2、事件源,即event dispatchers。是事件发起的主体,所有的dispatcher都是eventdispatcher或其子类。 3、事件监听器,即event listeners。它表现为一个函数,当事件发生时,事件源dispatcher通知该监听器去处理特定的事件。为对象添加监听器的方法是:addEventListener(type, function)。 当指定类型的事件发生时,事件监听器以事件对象eventObject为参数传递给事件响应函数。同一时刻同一组件可能有多个事件发生,因此这里指定事件类型是非常有必要的。 4、事件流,当一个组件触发事件时,这个事件会沿着一定的顺序流动,每经过一个组件,就会检测这个组件是否注册了该事件类型的监听器,如果注册了,就会响应,并调用事件处理函数。事件流分为三个阶段: (1)捕获阶段,Flex应用程序从根显示元素(如Application)逐层向下寻找,直到找到事件产生的源头。 (2)目标匹配阶段,在该阶段,Flex应用程序会调用目标对象自身注册的监听程序。 (3)冒泡阶段,在该阶段,从目标节点到根节点,逐层向上检测每个节点是否注册了监听器,相当于捕获阶段的逆过程。Flex应用程序可以在addEventListener()函数中的第三个参数设置事件获取的阶段,如果为true,则关闭捕获阶段,开启目标匹配和冒泡阶段。 如果要阻断事件流继续流动,可以在监听器的响应函数中添加: event.stopPropagation(); 由于Flex设置的监听事件类型比较少,如果需要设置组件的特殊响应事件,或者为自定义组件添加自定义的响应事件,我们需要设计自定义类型的Event对象。 下面我们以一个由button和textInput控件组成的自定义组件InputButtonComp为例,为该组件设置按钮单击时的响应事件。 第一步:设计自定义组件。 (1)新建InputButtonComp.as类文件,继承自BorderContainer容器,并定义自定义组件中需要包含的控件。 public class InputButtonComp extends BorderContainer {

响应式web网站设计制作方法

在研究响应式的时候,记录了一些感想,分享出来,抛砖引玉,希望可以和大家一起讨论。总结下来,响应式比之前想象的要复杂得多。 1. ie9以下(不包括ie9)采用ie条件注释,为ie8以及一下单独开一个样式文件 2. 一个模块的mq样式整体放在这个模块的样式的之后,符合层叠逻辑,也同时以免被层叠。 3. 祈求在一个相应点上同时做变化几乎是不可能的,因为版式中间的变化,无论是视觉还是具体的编码人员不可能掌握所有细节。 4. 流体布局很关键,%视父级为参照物,这一点虽然很多人都知道,但是实际做的时候却最容易被忽略。 5. 清除浮动也很重要,切记。 6. 如果你希望边框、边距(内、外)也在100%的范围内,直接设置width:auto就好了,不要给予希望在新的css3属性上,也不要寄希望在-webkit上,-webkit-很容易就会变成下一个ie6了。 7. 合理的嵌套更加健壮,用一个包装元素来替代设置当前元素margin或者padding。举例,假如有A和B两个元素,width是40%,maring-right是10%,这样很容易在搜索浏览器的时候篡位,所以用一个包装元素C去分别包裹A和B,然给给C设置50%,A和B分别设置为80%。这样就是合理且健壮的嵌套了。 8. 两行两列这种设计,由于流体布局和字数的不同,所以为每一行添加一个包装元素,更加健壮。也就是说,先做两行,再在每一行里做两列。 9. 不要奢望在在每一个像素的宽度上不会出现超出预期的表现,因为没有任何人知道页面在每一个像素宽度时候的表现的样子,页面越负责可预期的就越不准确。所以mq可能真的是“非预期数值”(预期数值指代在设计和实现之前约定的响应点) 10. 相同区间的mq和mq会层叠,全局的样式也会和mq中的样式层叠,所以属性尽量不要写成缩写。以减少忘记的风险。 11. 图片的自适应处理不容易,特别是有边框的,如果正常条件(没有利用mq来约束)下设置了宽和高,在另外一个mq下,仅仅设置一个属性是不行的,还是那句话,mq不是二选一(除非是两个不同的mq区间),而是层叠!! 12. 如果水平列表的两端的元素两端对齐,以四个元素为例,那么除了前三个预留左边距,最后一个为零;或者第一个右边据为0;后三个有右边距以外。可以采用第一个左侧有,最后一个右侧有,中间两个左右偏移边距来做,短的一面为边距除以空白数,比如4个列表项,边距为40,则40除以3。好处么?就是可以保证每一个外包装为通栏的25%。 13. 四个25%,两个50% 没关系,但是50% 25% 25%就可能会掉下去最后一个,所以24.99,22.49有时还会相差1~2像素。 14. 如果版式变化不大,那么从大到小的写mq,不必写一个区间,只写最大值即可,这样一层一层的继承,小尺寸继承大尺寸,另外,不用过分担心选择器本身权重的问题,mq会提高其优先级。 15. 像导航和版权这种在pc、pad、phone截然不同的版式。mq,就写区间。这样在区间外就等于这些dom毫无样式,这样就不比担心由继承引发的覆盖、优先级、重写以及未知问题。减少了属性的重写,提高了效率、降低了修改成本。其实就是等于一个dom,为不同

中国历史上重大事件时间(整理后)

中国 一、原始社会(约170万年前到约公元前21世纪) 约0.5-0.7万年前河姆渡、半坡母系氏族公社 约0.4-0.5万年前大汶口文化中晚期,父系氏族公社 约4000多年前传说中的炎帝、黄帝、尧、舜、禹时期 二、奴隶社会(公元前2070年到公元前476年) 夏公元前2070年到公元前1600年 商公元前1600 年到公元前1046年 西周公元前1046年到公元前771年 春秋公元前770年到公元前476年 三、封建社会(公元前475年到公元1840年) 战国(公元前475年到公元前221年) 公元前356年商鞅开始变法 秦(公元前221年到公元前206年) 公元前221年秦统一,秦始皇确立郡县制,统一货币、度量衡和文字 公元前209年陈胜、吴广起义爆发 公元前207年巨鹿之战 公元前206年刘邦攻入咸阳,秦亡 公元前206年—公元前202年楚汉之争 西汉(公元前202年到公元8年) 公元前202年西汉建立 公元前138年张骞第一次出使西域 公元8年王莽夺取西汉政权,改国号新东汉(25年到220年) 25年东汉建立 105年蔡伦改进造纸术 132年张衡发明地动仪 184年张角领导黄巾起义 200年官渡之战 208年赤壁之战 三国(220年到280年) 220年魏国建立 221年蜀国建立 222年吴国建立 263年魏灭蜀 265年西晋建立,魏亡 西晋(265年到316年) 280年东晋灭吴 316年匈奴攻占长安,西晋结束东晋(317年到420年) 317年东晋建立 383年淝水之战 南北朝(420年到589年) 420年南朝宋建立 隋(581年到618) 581年隋朝建立 589年隋统一南北方 605年开始开通大运河 611年隋末农民起义开始 唐(618年到907年) 618年唐朝建立,隋朝灭亡627年-649年贞观之治

Java监听键盘鼠标全局事件

#include #include "SysHook.h" #include HINSTANCEhInst = NULL; JavaVM * jvm = NULL; jobject hookObj_kb = NULL; jobject hookObj_ms = NULL; jobject g_kl = NULL; jmethodID processKeyID_kb = NULL; jmethodID processKeyID_ms = NULL; DWORDhookThreadId = 0; LONGg_mouseLocX = -1;// x-location of mouse position LONGg_mouseLocY = -1;// y-location of mouse position extern"C" BOOLAPIENTRY DllMain(HINSTANCE_hInst,DWORDreason,LPVOIDreserved) { switch(reason) { caseDLL_PROCESS_ATTACH: printf("C++: DllMain - DLL_PROCESS_ATTACH.\n"); hInst = _hInst; break; default: break; } returnTRUE; } LRESULTCALLBACK MouseTracker(intnCode,WPARAMwParam,LPARAMlParam) { JNIEnv * env; KBDLLHOOKSTRUCT * p = (KBDLLHOOKSTRUCT *)lParam; if(jvm->AttachCurrentThread((void**)&env, NULL) >= 0) { if(nCode==HC_ACTION) { MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lParam; if(pStruct->pt.x != g_mouseLocX || pStruct->pt.y != g_mouseLocY) { env->CallVoidMethod(hookObj_ms, processKeyID_ms, (jint)pStruct->pt.x,(jint)pStruct->pt.y, g_kl); g_mouseLocX = pStruct->pt.x; g_mouseLocY = pStruct->pt.y; } }

响应式网页设计的介绍

响应式网页设计的介绍 响应式网页是一种对于设计的全新思维模式,响应是双方的,是互动的过程,在这个过程中设计师要考虑设备的性能、Dom节点数量、屏幕的大小等。 1、如何理解响应式设计(RWD) 响应式网页设计的概念最初是由Ethan?Marcotte提出,从设计的角度引领我们思考:为什么一定要为每个用户分别做一套设计方案呢?是否可以有一种设计能够根据不同设备环境自动响应以及调整显示?特别是随着移动互联网的飞速发展,响应式Web设计不仅仅是关于屏幕分辨率自适应以及自动缩放的图片等等,它更像是一种对于设计的全新思维模式-响应是双方的,是互动的过程,在这个过程中设计师要考虑设备的性能、Dom节点数量、屏幕的大小等等。 2、响应式产品设计 响应式设计是从产品角度来进行的设计,在这个阶段我们需要产品经理、交互设计师、设计师以及工程师共同介入了。我们需要打破传统的思维模式去思考设计,从纯粹传统的Web向移动应用过度。第一步需要有明确的信息架构,来从最小显示屏的移动设备做产品设计,在移动设备中抛弃更多的使用干扰,保证核心功能的最优体验;同时交互与设计师的介入处理如何把模块设计的更小更有弹性,并初步确定设计风格、设计框架等方案;而工程师需要在产品经理与设计师确定的方案中进行代码测试,充分利用不同设备独有的特性并进行框架搭建。 在设计阶段,线框图和原型图是必须的,而好的线框图和原型工具会让你更加专注于交互和功能。希望下面的工具能够帮你为客户和团队设计出优秀的作品。 3、响应式设计中的界面设计 对于界面设计,在以前的设计中更多是针对桌面产品的,设计可能就是一个尺寸,每个模块的位置比较固定,但是在响应式设计中,这些东西就改变了,设计师需要根据产品的需要设计多个版本的设计,在这些不同的版本中,模块A 在1024的宽度下,可能会是黑色背景,但是到了768下面可能会变成白色背景,实现了在不同宽度的不同展现。 4、响应式设计针对媒体查询的断点 从传统的设计角度,可以通过媒体查询(Media Query)的方式改变网页的

中国与西方历史重大事件时间表

中国的 一、原始社会(约170万年前到约公元前21世纪)约170万年前元谋人生活在云南元谋一带 约70-20万年前北京人生活在北京周口店一带 约1.8万年前山顶洞人开始氏族公社的生活 约0.5-0.7万年前河姆渡、半坡母系氏族公社 约0.4-0.5万年前大汶口文化中晚期,父系氏族公社 约4000多年前传说中的炎帝、黄帝、尧、舜、禹时期二、奴隶社会(公元前2070年到公元前476年) 夏公元前2070年到公元前1600年 公元前2070年禹传予启,夏朝建立 商公元前1600年到公元前1046年 公元前1600年商汤灭夏,商朝建立 公元前1300年商王盘庚迁都殷 西周公元前1046年到公元前771年 公元前1046年周武王灭商,西周开始 公元前841年国人暴动 公元前771年犬戎攻入镐京,西周结束 春秋公元前770年到公元前476年 公元前770年周平王迁都洛邑,东周开始 三、封建社会(公元前475年到公元1840年)

战国(公元前475年到公元前221年) 公元前356年商鞅开始变法 秦(公元前221年到公元前206年) 公元前221年秦统一,秦始皇确立郡县制,统一货币、度量衡和文字公元前209年陈胜、吴广起义爆发 公元前207年巨鹿之战 公元前206年刘邦攻入咸阳,秦亡 公元前206年—公元前202年楚汉之争 西汉(公元前202年到公元8年) 公元前202年西汉建立 公元前138年张骞第一次出使西域 公元8年王莽夺取西汉政权,改国号新 东汉(25年到220年) 25年东汉建立 73年班超出使西域 105年蔡伦改进造纸术 132年张衡发明地动仪 166年大秦王安敦派使臣到中国 184年张角领导黄巾起义 200年官渡之战 208年赤避之战

红外报警说明书

概述 防盗报警主机是集多项先进技术、功能于一体的卓越的智能安全技术防范产品。防盗系统由控制键盘、用户主机、遥控器、红外探测器、门磁、烟雾探测器和强音警笛等组成。安装方便、操作简捷,可同时储存8个报警电话(如:110指挥中心、用户移动电话号码、固定电话号码等)。既可单独不联网使用,亦可通过电话线实现区域联网,是家居、营业场所、金融系统等单位安装防盗报警设备的理想选择。 1.日常操作名词解释: 布防:布置安全防范任务(指防盗),使主机进入警戒状态,也叫做设防、警戒或开机。 撤防:撤消安全防范任务(指防盗),也叫做解除警戒或关机。 防区旁路:暂时关闭防区,当某些防区有故障或有人活动影响布防时,可将其旁路,使其不起作用。 撤防一次,取消已旁路的防区。 防区触发:在撤防状态,探测器检测到有人,不为报警。例如门被打开门磁的磁铁与主体部份分开,即为门磁触发。退出延时:主机布防后,提供一段时间给用户离开。 进入延时:用户外出回来,从大门进入触发探测器后,主机不会立即报警,提供一段时间给用户将主机撤防,超时不能撤防主机才会报警。(建议退出/进入延时设置为20~30秒) 2.使用前注意事项: ●设定公安局110指挥中心报警电话号码之前,应征得公安部门的同意后,方可将“110”号码存入用户主机内, 否则由此产生的一切后果本公司不负责。 ●请仔细阅读及保管<<用户一本通>>,以便您更好掌握日常使用操作方法。 ●为确保主机24小时不间断运行,请保持市电正常供电。 ●如果市电经常停电,将会缩短内部备用蓄电池的使用寿命。 ●不要随意拆卸用户主机,以免发生意外和人为的损坏。 ●如用户主机发生故障,请持购机票据和保修卡与销售代理或我公司联系。 - 1 -

浅谈响应式网站论文

浅谈响应式网页设计 [摘要]经过十多年的快速发展,中国的互联网如今已经日趋成熟。随着3G, 4G的发展 和移动通信及WEB2. 0技术的提升以及近年来各种移动智能设备的兴起,移动互联网 也即将会步入高速发展时期,成为一种大势所趋。这一来就使中国互联网的发展变得 更加丰富、多元化趋势。越来越多的用户拥有多种移动设备,像智能手机、平板电脑、智能手表等,在现今的大环境下移动设备正在普及并且正在逐渐超过PC设备,面对市场上移动设备的不断增多,同时伴随着各种设备屏幕的分辨率、尺寸和型号的越来越多,如何能够在不同屏幕、不同系统平台等环境下保持网页的一致性,满足用户的一 致体验这将成为了整个网页设计行业的一个新挑战。 据非官方调查,移动设备正在逐渐超过PC设备,如果数据属实那么无可置疑,以后我们的网页设计就应该实现响应式布局。设想一个在移动终端都不能正常显示的网页能 给公司企业带来的大概也只有负面的影响,所以为了避免这种情况能够使所有利用移 动设备访问网站的用户都能有最优最好的体验,响应式设计绝对是最好的一种选择. 【关键词】:设备响应式设计;Web设计;移动终端;动态网页 一、晌应式网页设计《Responsive Web design)的理念 页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。具体的实践方式由多方面组成,包括弹性网格和布局、图片、CSS media query的使用等。无论用户正在使用笔记本还是ipad,我们的页面都 应该能够自动切换分辨率、图片尺寸及相关脚本功能等.以适应不同设备;换句话说,页面应该有能力去自动响应用户的设备环魂。响应式网页设计就是一个网站能够兼容多 个终端,而不是为每个终端做一个特定的版本。这样,我们就可以不必为不断到来的 新设备做专门的版本设计和开发了。 其实这个是一个设计问题,既然是设计的问题,这里就会涉及到很多层面的角色,包括交互设计师,视觉设计师,前端工程师,后台开发工程师。交互设计师,要满足 各自不同分辨率和设备的页面布局展现方式。而视觉设计师,则要考虑到页面性能和 移动端带宽问肠,权衡下页面的酷炫效果和视觉色彩的运用。而前端和后台开发工程师,则要完成满足视觉需求和交互功能.更要考虑到页面加载性能和消耗带宽问题,更重要的是移动端安全性能方面!

(完整版)高中历史重大事件时间表

世界近代史 ●西方资本主义的发展 十四世纪意大利出现资本主义萌芽 十五世纪晚期英法中央集权国家形成,圈地运动开始 14-15世纪欧洲出现资本主义萌芽 1840年前后英国率先完成工业革命 18世纪60年代到19世纪中后期自由资本主义阶段 19世纪中后期垄断资本主义开始出现 1933年罗斯福新政后,国家垄断资本主义开始出现 二战结束到20世纪70年代初期西方资本主义国家普遍奉行国家干预的经济政策,出现了经济发展的“黄金时期” 20世纪70年代后美英等国逐渐发展出一种将政府干预与市场相结合的、国有制与私有制并存的“混合经济” ●西方人文主义的发展 十四至十六世纪欧洲文艺复兴运动在意大得兴起 十六世纪以后,文艺复兴从意大利传播到欧洲其他国家 十六世纪 1517年,马丁·路德拉开宗教改革序幕 十七至十八世纪 17世纪时,英国出现了早期启蒙运动 18世纪中叶,启蒙运动在法国进入高潮。 伏尔泰、孟德斯鸠、卢梭 ●新航路开辟: 1487-1488迪亚士远航到达非洲南部沿海 1492 哥伦布远航到达美洲 1497-1498 达伽马远航到达印度 1519-1522 麦哲伦船队环球航行 ●资产阶级代议制度的确立 1640 英国资产阶级革命开始 1688年英国光荣革命,资产阶级和新贵族的统治确立 1775-1783北美独立战争 1776北美大陆会议发表《独立宣言》,宣布美利坚合众国独立 1787年美国1787年宪法 1870-1871普法战争 1871年德意志统一最终完成德意志帝国宪法 1875年法兰西第三共和国宪法,在法律上正式确立共和政体 ●三次工业革命 18世纪60年代英国工业革命开始 1785瓦特的改良蒸汽机投入使用 19世纪70年代第二次工业革命开始 19世纪70年代,人类进入“电气时代” 19世纪七八十年代,内燃机问世

java四种方法事件监听(匿名类,外部类,内部类,自身)

JAVA四种方法实现事件监听 1.外部类实现事件监听: import java.awt.*; import java.awt.event.*; import javax.swing.*; publicclass Listener1extends JFrame { JButton button1,button2; JPanel pane1,pane2,p1,p2; CardLayout card1=new CardLayout(); /*CardLayout布局方式将容器中的每个组件看作一张卡片。 一次只能看到一张卡片,容器则充当卡片的堆栈*/ Listener1(){ this.setTitle("外部类实现事件监听"); this.setBounds(200,200,300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); init(); } publicvoid init(){ p1=new JPanel(); p1.add(new JLabel("第一个面板")); p1.setBackground(Color.red); p2=new JPanel(); p2.add(new JLabel("第二个面板")); p2.setBackground(Color.green); pane1=new JPanel(card1); pane1.add("红色", p1); pane1.add("绿色", p2); button1=new JButton("红色"); button2=new JButton("绿色"); pane2=new JPanel(); pane2.add(button1); pane2.add(button2); this.add(pane1,BorderLayout.CENTER); this.add(pane2,BorderLayout.SOUTH); button1.addActionListener(new ColorEvent(card1,pane1));

中国历史重大事件时间表

一、原始社会(约170万年前到约公元前21世纪)二、奴隶社会(公元前2070年到公元前476年) 约170万年前元谋人生活在云南元谋一带夏公元前2070年到公元前1600年 约70-20万年前北京人生活在北京周口店一带公元前2070年禹传予启,夏朝建立 约1.8万年前山顶洞人开始氏族公社的生活商公元前1600 年到公元前1046年 约0.5-0.7万年前河姆渡、半坡母系氏族公社公元前1600年商汤灭夏,商朝建立 约0.4-0.5万年前大汶口文化中晚期,父系氏族公社公元前1300年商王盘庚迁都殷 约4000多年前传说中的炎帝、黄帝、尧、舜、禹时期西周公元前1046年到公元前771年 公元前1046年周武王灭商,西周开始 公元前841年国人暴动 公元前771年犬戎攻入镐京,西周结束 春秋公元前770年到公元前476年 公元前770年周平王迁都洛邑,东周开始 三、封建社会(公元前475年到公元1840年) 战国(公元前475年到公元前221年)公元前356年商鞅开始变法 秦(公元前221年到公元前206年) 公元前221年秦统一,秦始皇确立郡县制,统一货币、度量衡和文字 公元前209年陈胜、吴广起义爆发公元前207年巨鹿之战 公元前206年刘邦攻入咸阳,秦亡公元前206年—公元前202年楚汉之争 西汉(公元前202年到公元8年)公元前202年西汉建立 公元前138年张骞第一次出使西域公元8年王莽夺取西汉政权,改国号新 东汉(25年到220年)25年东汉建立 73年班超出使西域105年蔡伦改进造纸术 132年张衡发明地动仪166年大秦王安敦派使臣到中国 184年张角领导黄巾起义200年官渡之战 208年赤避之战三国(220年到280年)220年魏国建立 221年蜀国建立222年吴国建立 230年吴派卫温等率军队到台湾263年魏灭蜀 265年西晋建立,魏亡西晋(265年到316年) 280年东晋灭吴316年匈奴攻占长安,西晋结束 东晋(317年到420年)317年东晋建立 383年淝水之战南北朝(420年到589年) 420年南朝宋建立494年年到北魏孝文帝迁都洛阳 隋(581年到618)581年隋朝建立 589年隋统一南北方605年开始开通大运河 611年隋末农民起义开始,山东长白山农民起义爆发唐(618年到907年) 618年唐朝建立,隋朝灭亡627年-649年贞观之治 713年-741年开元盛世755年-763年安史之乱 875年-884年唐末农民战争五代(907年到960年) 907年后梁建立,唐亡,五代开始916年阿保机建立契丹国 北宋(960年到1127年)960年北宋建立 1005年宋、辽澶渊之盟1038年元昊建立西夏 11世纪中期毕升发明活字印刷术1069年王安石开始变法 1115年阿骨打建立金1125年金灭辽

相关文档
最新文档