网页小 Widget 应用之 extjs.com 特效介绍篇

说到这儿,便想起刚学网页的时候,使用 Dreamweaver 的一个按钮翻转的 JS,那是很典型的网页效果,说出函数名字来大伙还记得吗?……MM_preloadImages('images/2.jpg')、MM_swapImage('rotator','','images/2.jpg',1)  呵呵。同样我们也可以在 Ext Core 之中轻松实现,这部分内容放在本文第三小节中为大家介绍。Update 2010.1.2

在自家页面上使用自己的库,自然不是一件稀奇的事,而且 extjs.com 的 JS 特效都不是那么复杂,几个函数足以完成任务了。今天继续昨晚对 widget 余庆,继续 copy and paste 她的代码来看看。当然大家也可以上 extjs.com 直接拿页面回来,但 CSS 背景图片的下载就不好寻址,推荐一下这个 Firefox 插件ScrapBook。感觉而言,所用的 JS 代码,大体上比较鲜明的 JS 特效有菜单及简单的讯息提示(Messages),所谓 Messages,就是只有一两句的提示,但位置醒目,能起到很好的提示作用。下面就打算把这两个 JS 抠出来。

一、菜单

extjs.com 的菜单实际已不是软件定义中的“菜单”了,因为我们看到菜单中所表现的元素更为丰富,其理解方式可以说是在导航栏上添加一个 onmouseover 的事件,触发该事件就会显示“面板”,因为从 HTML 上看到,组成各项菜单的就是一个四四方方的“面板”。 呵呵,这样去实现也倒容易…以最后的 Store 一项为例,其“面板”的 HTML 结构如下:

<div class="flyout-menu" id="store-menu" style="display: none;" mce_style="display: none;">
<div style="width: 200px;">
<h3>
<a href="http://www.extjs.com/store/extjs/" mce_href="http://www.extjs.com/store/extjs/">Ext JS</a></h3>
<ul>
<li><a href="http://www.extjs.com/store/extjs/" mce_href="http://www.extjs.com/store/extjs/">Licenses</a></li>
<li><a href="http://www.extjs.com/store/extjs/#support-table" mce_href="http://www.extjs.com/store/extjs/#support-table">Support Subscriptions</a></li>
</ul>
<br>
<h3>
<a href="http://www.extjs.com/store/gxt/" mce_href="http://www.extjs.com/store/gxt/">Ext GWT</a></h3>
<ul>
<li><a href="http://www.extjs.com/store/gxt/" mce_href="http://www.extjs.com/store/gxt/">Licenses</a></li>
<li><a href="http://www.extjs.com/store/gxt/#support-table" mce_href="http://www.extjs.com/store/gxt/#support-table">Support Subscriptions</a></li>
</ul>
<br>
<h3>
<a href="http://www.extjs.com/store/faq.php" mce_href="http://www.extjs.com/store/faq.php">Help</a></h3>
<ul>
<li><a href="http://www.extjs.com/store/faq.php" mce_href="http://www.extjs.com/store/faq.php">Ordering FAQ</a></li>
</ul>
</div>
</div>

其中,最外层 div 其样式应该是 class="flyout-menu",以归为菜单的一类,而且还要隐藏菜单 style="display: none;",默认状态下隐藏,使用的时候方才显示。介绍完结构之后,我们看看代码,也是比较简单的:

var activeMenu;

function createMenu(name){
var el = Ext.get(name+'-link');
var tid = 0, menu, doc = Ext.getDoc();

var handleOver = function(e, t){
if(t != el.dom && t != menu.dom && !e.within(el) && !e.within(menu)){
hideMenu();
}
};

var hideMenu = function(){
if(menu){
menu.hide();
el.setStyle('text-decoration', '');
doc.un('mouseover', handleOver);
doc.un('mousedown', handleDown);
}
}

var handleDown = function(e){
if(!e.within(menu)){
hideMenu();
}
}

var showMenu = function(){
clearTimeout(tid);
tid = 0;

if (!menu) {
menu = new Ext.Layer({shadow:'sides',hideMode: 'display'}, name+'-menu');
}
menu.hideMenu = hideMenu;

menu.el = el;
if(activeMenu && menu != activeMenu){
activeMenu.hideMenu();
}
activeMenu = menu;

if (!menu.isVisible()) {
menu.show();
menu.alignTo(el, 'tl-bl?');
menu.sync();
el.setStyle('text-decoration', 'underline');

doc.on('mouseover', handleOver, null, {buffer:150});
doc.on('mousedown', handleDown);
}
}

el.on('mouseover', function(e){
if(!tid){
tid = showMenu.defer(150);
}
});

el.on('mouseout', function(e){
if(tid && !e.within(el, true)){
clearTimeout(tid);
tid = 0;
}
});
}

createMenu('products');
createMenu('support');
createMenu('store');

通过以上的几个步骤,就可以创建简单导航菜单,相信代码也很好理解,快点放在你的项目中使用吧!

二、Messages

Messages 就更简单了。Messages 需要定义两个容器,msg = Ext.get('msg') 和 msgInner = Ext.get('msg-inner')。

<div style="position: static; visibility: visible; left: auto; top: auto; z-index: auto;" id="msg">
<div class="" id="msg-inner">
Ext 3.0.0 Release Now Available »</div>
</div>

 

// messages
var msgs = [
{ text: 'Ext Enterprise Training Now Available »', url: 'http://extjs.com/support/training/' },
{ text: 'Ext GWT 2.0 Release Now Available »', url: 'http://extjs.com/products/gxt/' },
{ text: 'Ext 3.0.0 Release Now Available »', url: 'http://extjs.com/products/extjs/download.php' }
];
var msgIndex = 0;
var msg = Ext.get('msg'),
msgInner = Ext.get('msg-inner'),
active = null;
if (msgInner) {
msgInner.addClassOnOver('msg-over');
}
if (msg) {
msg.on('click', function() {
window.location = active.url;
});
}
function doUpdate() {
if (msgInner) {
msgInner.update(active.text);
}
if (msg) {
msg.slideIn('b');
}
}
function showMsg(index) {
if (msgInner && !msgInner.hasClass('msg-over')) {
active = msgs[index];
if (msg && msg.isVisible()) {
msg.slideOut('b', { callback: doUpdate });
} else {
doUpdate();
}
}
}
setInterval(function() {
msgIndex = msgs[msgIndex + 1] ? msgIndex + 1 : 0;
showMsg(msgIndex);
}, 5000);
showMsg(0);

明显,定义新的 msgs 数组便可以修改要显示的内容。

三、Ext JS 网页特效:翻转菜单。

 * 設置反轉菜單。這是一個經典的網頁特效,需要設置如下的 CSS 樣式:
 * 註意:!important 是為FF所需的關鍵字;
 * 設置步驟:
 * 1、HTML 是:
<textarea class="html">
<ul id='gobalMenu'>
<li id="index">
<a href="../" mce_href="" title="首页"><img src="/images/s.gif" mce_src="images/s.gif" /></a>
</li>
……
<ul id='gobalMenu'>
<textarea>
 * 2、設置樣式display:line,li的高度,圖片的高度:
 * 註意:font-size:18px是為FF所需的關鍵字
<textarea class="css">
#gobalMenu li{
display:inline;
height:22px;
margin-left:10px;
font-size:18px;
background-repeat:no-repeat;
}
#gobalMenu li img{
height:22px;
}

 * 3、反轉的樣式必須是“ li元素名稱”+OnHover
<textarea class="css">
li#docs{
background:url(main_15.gif) no-repeat;
}
.docsOnHover{
background:url(index_hover_16.gif) no-repeat !important;
}

执行代码:

callHoverMenu = function(LI_selector){
Ext.onReady(function(){
Ext.select(LI_selector).each(this);
}, function(li){
Ext.get(li.dom.id).addClassOnOver(li.dom.id + 'OnHover');
});
}

四、小结

官方所释出的 DEMO 中 Ext JS Core,除了 LightBox,还有 Carousel、Menu 和 Tabs 新提供的 Widget。在上一讲第一讲中,我们已经谈论过 Ligiht。本文中将会看看:1、Carousel 画册控件;2、Menu 菜单;3、标签页 Tabs。了解 Ext JS 的朋友可能好奇,不是 Ext JS 里面已经有 Menu 和 Tabs 组件了吗,为什么 Ext JS Core 还会提供这两个控件呢?两者的定位明显不同,要求在 Portal 为背景的页面加入 Component/Container 等组件,光是代码足够多的了,而且维护难度大,页面逻辑复杂——吃力不讨好,因此完全没有必要,于是更加轻型的 Widget 应运而生了。

每一个特效背后所组成的 HTML/CSS/JavaScript 都是研究的对象。我们研究 HTML/CSS 是为了我们这些最终用户不断修改,以符合制作的 Widget 符合我们的要求;JS 一般是封装好的逻辑,没有额外的理由我们怎么会花时间研究它呢?而 Ext JS Core 这次释出的 DEMO 却不同,仍有相当可观之处,实在是很好的研究对象。正如首次推介的那样,“find and learn somethingnew”,大大满足了新鲜和求知的冲动,没有比这个更好的理由?

在下一讲中,有机会的话,小弟将会讲讲 Carousel、Menu 和 Tabs,希望大家多留意。

不是小弟我讨好 Ext JS,因为 DEMO 本身所宣扬的 “A minimal amount of elegant and readable code” 似乎是得到印证,——代码中都写成这样了,各位看官可以一睹为快。最后,——祝大家使用 Ext JS 祺顺!

本文所说例子的打包文件,可以这里点击下载,大小 989KB。

时间: 2024-10-25 08:09:31

网页小 Widget 应用之 extjs.com 特效介绍篇的相关文章

网页小 Widget 应用之 Carousel、Menu 和 Tabs(上)

介绍 Wdiget 之前,我想说说一个关于摘取网页的小插曲.之前我为大家介绍过摘取网页的好工具,ScrapBook .ScrapBook 在处理纯视觉的页面,也就是 CSS/HTML 的时候,表现较为满意,只不过在选择下载"JavaScript",就有那么一点力不从心了,--这不,人家也在上面说了"JavaScript may cause some problems".的确,我使用 ScrapBook 的时候真是会碰到一些页面渲染不正确的问题.那,有没有比较好的工具

网页小 Widget 应用之 Lightbox 图片告示

现在开始谈谈 Ext JS Core,有关网页 Widget 的应用. 首先是经典的 Lightbox 效果(单击我进入演示).Ext.ux.Lightbox 支持两种方式的登记(register()),一种是单张的图片登记的,无须多说:另外一种是批量的,就是有"上一张"/"下一张"的效果,供用户前进或者后退.应该说,这两种方式已经满足了一般 Lightbox 效果的要求,而且图片出现的时候带有动画效果,让用户有比较活泼的感觉. Ext.ux.Lightbox.re

网页小Widget应用之Carousel、Menu和Tabs(下)

三.Menu 咦!?Menu咱们不是讲过了吗?是的,Menu之前的实现是非常简单的一种,--作为较"专业"的Widget,Core还是有必要重新实现一个Menu Widget,所以送到你手上的就有这个Ext.ux.Menu.具体说,那种简单的"菜单"只是较快速地做出类似的效果,适合于某个页面的URL跳转,不够灵活,难以适合在项目中使用,比如当前架构要求的"单页面程序(One Page, One Application)",明显菜单应该可以登记事件

网页小Widget应用之数据绑定新方式:JSONP

所谓JSONP,是跨域的一种访问方式,其特点在于比较方便地运行第三方的请求会话来进行跨域.在跨域这一点上,可以说是毫无顾忌的.跨域(Cross-Domain)在网络安全眼中可不是什么客气的行为.利弊兼有之,弄不好的话既不能为第三方提供访问数据的服务,又暴露了更多的安全漏洞,严重的还会引狼入室.一般的WebService中,支持JSON的还比较少,多数采用XML文档作为答应结果的格式文档.但是我们一方面知道,结合Script标签的src的自由性,却有无比的想象空间.那么能不能理由<script s

谷歌并购以色列网页小工具提供商LabPixies

北京时间4月27日晚间消息,据国外媒体报道,谷歌公司(Google Inc)已同意收购以色列网页小工具提供商LabPixies公司. 以色列媒体表示,谷歌以2500万美元的价格收购了LabPixies公司.LabPixies开发的小工具包括日历.新闻提要以及待办事项清单,还有娱乐和游戏. 这是谷歌首次收购以色列公司. LabPixies是为谷歌的iGoogle和Android软件应用以及苹果公司(Apple Inc)的iPhone提供个性化网络工具的首批开发商之一. (娟子)

FrontPage XP制作网页小技巧八则

frontpage|技巧|网页 靓丽的网页是怎样生成的?也许您会脱口而出,当然是自己设计出来的.没错!不过这其中也有网页制作工具的一部分功劳,因为功能强大的网页制作工具可以为网页增色不少!以前,FrontPage 2000是很多设计师们首选的网页制作工具,但自从FrontPage XP问世后,人们又开始利用它来继续"设计蓝图"了.但由于FrontPage XP较FrontPage 2000相比,推出的时间不长,有许多用户对它内部的一些操作小技巧可能不太熟悉.为此,笔者在这里就提供一些F

设计参考:网页小空间大图片的放置

原文出处:www.bamagazine.com 那里都有狭窄的空间:网页横幅.新闻标题处的空间.柱状的广告,但一张来自照相机的照片却要大很多,它们的比例一般是 6 × 4 英寸 .你如何处理这两者的关系?在本文中我们提供三种解决办法. 一.新闻标题: 我们想将一张大的照片应用在标题区域里,怎么办? 1 .大胆剪切: 如果你的照片的空度与你想要应用的区域的宽度一样,我们可以对照片进行大胆的剪切.可能令你感到着迷的是,一张小照片同样可以传达大照片的精粹. 选择照片最传神的焦点,然后在照片上应用剪切.

JavaScript网页制作特殊效果用随机数_典型特效

网络世界精彩无比,绚丽的页面如果合理的使用特效,一定会增色不少.下面就是我总结的特效: 跳动文字 想看会跳舞的文字?来吧! 代码:先在〈head〉和〈/head〉之间添加〈script language="JavaScript"〉 〈!-- function font11() //定义函数font11() { document.all.a1.style.fontSize=16+ Math.floor(Math.random()*24); //调用Math.random()函数产生一个随

小程序:酒店商城小程序实战案例开发、小程序项目源码弹窗特效

利用最近的空档时间,整理了下前段时间开发的酒店商城小程序项目案例.  该商城小程序项目源码100%纯手写代码,结构简单易懂.易于学习,开发中用到了一些微信组件 如: swiper.scroll-view.navigator.....,并且运用动画函数自写了一个底部动画弹窗特效(弹窗内容自定),小程序城市定位选择switchCity进行了代码优化,滑动点击右侧字母可定位到相应城市. https://shop156783577.taobao.com/             -->>> QQ