Posts tagged with javascript

entry 多浏览器的Opacity

opacity是CSS 3里的一个属性,用来设定元素的透明度。当然现在还只有少部分浏览器支持。

不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari:

  • IE: filter:alpha(opacity)
  • Mozilla: -moz-opacity
  • Safari: -khtml-opacity

很不幸的是,你没看见Opera,老版本的Opera并没有什么私有属性可以代替opacity。(新版Opera已经支持opacity

所以以前用CSS设定一个元素半透明的话,可能会这样写:

.opacity{
filter:alpha(opacity=50); /* IE */
-moz-opacity:0.5; /* 老版Mozilla */
-khtml-opacity:0.5; /* 老版Safari */
opacity: 0.5; /* 支持opacity的浏览器*/
}

用javascript来设定一个元素为半透明:

object.filter = "alpha(opacity=" + opacity + ")";  /* IE */
object.MozOpacity = (opacity / 100); /* 老版Mozilla */
object.KhtmlOpacity = (opacity / 100); /* 老版Safari */
object.opacity = (opacity / 100); /* 支持opacity的浏览器*/

entry Jquery版的简单Accordion效果

还在使用mootools的时候,就非常喜欢这个Accordion(折叠菜单)效果,特别是slideUp和slideDown的滑动,接近flash的效果。今天我们就来用jquery来制作一个简单的Accordion效果。

首先准备好html结构,因为是针对sandbox template,它的sidebar结构是这样的:

<div class="sidebar">
<ul class="xoxo">
<li class="widget">
<h3 class="widget-title">content 1</h3>
<ul>
<li>this is content under content 1</li>
<li>this is content under content 1</li>
</ul>
</li>
<li class="widget">
<h3 class="widget-title">content 2</h3>
<ul>
<li>this is content under content 2</li>
<li>this is content under content 2</li>
</ul>
</li>
</ul>
</div>

有了结构,我们就可以开始对结构做文章了,先把所有需要折叠的内容先隐藏:

$('li.widget > ul').hide();

这里我们使用的 > 相似于CSS中的一级子元素选择符,隐藏所有第一级的ul元素。

接着我们设定折叠的控制器,本例中我们使用h3:

$('li.widget > h3').click(function() {
var content = $(this).next();
content.slideToggle('fast');
});

next()来获得跟h3平级的下一个元素,也就是我么不能够结构中的ul,然后用slideToggle来执行折叠动作,也就是slideUpslideDown。这时候我们已经可以进行正常的折叠操作了,但是我想要做到同时只能展开一个内容,该如何处理?

其实也不难,jquerySelectors很强大,看看怎么做:

var others = content.parent().siblings("li.widget").find("ul:visible");

这里的parent()用来获取父元素,find()就是遵循一定的规则(使用Selectors)去查找符合条件的元素,本例中查找li.widget下的所有visible(CSS属性visibility:visible; 也就是本例中被展开的)的ul元素。

最后我们得到这样的内容:

$(document).ready(function(){
$('li.widget > ul').hide();
$('li.widget > h3').click(function() {
var content = $(this).next();
var others = content.parent().siblings("li.widget").find("ul:visible");
if (others.length ) {
others.slideUp('fast', function() {
content.slideToggle('fast');
});
} else {
content.slideToggle('fast');
}
});
});

一个简单的效果看这里

entry 是设计师还是开发人员?

“网站前台打杂”现在有了一个很响亮的名字 - “网站前端开发工程师”,但是我是设计师还是开发者呢?以下是一篇讨论这个问题的问题,翻译的有些生硬,浏览不顺的可以看看原文。

翻译至:Are we designers or developers?,作者 Roger Johansson

在站点的关于页面(原作者的about),我称自己为“开发人员/设计师/应时作家”。这有一点模棱两可,我仍然在寻找一个答案:当别人问我靠什么来维持生计时,我的回答。我是一个设计师?网站开发人员?网站程序员?全部都是?都不是?这是很难用一句简单的话来回答。

我的答案会基于谁来问,什么时候问,为什么问,在什么情况下问。有时我会说“我在网络上工作” 或者 “我是做网站的”,任意一个答案都是真的,但是并没有真正的表达我到底是干什么的。显然给出一个简单明了的答案很容易。

在某个方面,我是一个十足的设计师,虽然最近在做一些没有花哨图案的设计。很多人错误的认为设计单纯的等于图形设计,但是我认为设计也可以是使创意变成现实的过程。当我这么做的时候,我可以称自己为网页设计师。

不可否认,如果“网页设计师”的头衔对我来说只是对工作内容的解释,这违背了我从网络泡沫得来的经验。那经验提醒我许许多多的外行人投身到网络,只是因为膨胀的网络需要更多的人而已。这同时让我想到业余的爱好者们只会使用破解版本的Dreamweaver 或者 GoLive提供的WYSIWYG模式来制作一个网站。所以我发现很有必要称自己为网页设计师

作为另一个选择,有时我称自己为“网页开发者”。但是问题在于很多人都认为网页开发者更多的做后台程序,而我却很少做此类的工作。但是这听起来比网页设计师更专业。

我们还有什么其他的选择?嗯,还有这么些头衔像UI程序员,前端开发者,UE设计师等等,太多了,然而可以正确表达出我在做什么的却很少,这样对于那些并不是从事网络相关行业的人,就很难理解了。

这真的能成为问题吗?大多数情况下,不是。但是有点棘手的是理发师或者你的邻居并不能通过这些来明白你到底怎么维持生计。虽然“我在网络上工作” 或者 “我是做网站的”看起来很好的回答了问题,但这并没有告诉他们,你做图形设计,程序,或者其他的。

所以我想问那些,并没有真正意义上的做图形设计,但是主要使用HTML, CSS, JavaScript, and accessibility来工作的读者,两个问题:

  1. 认为 自己是一个设计师还是一个开发者?
  2. 称呼 自己是一个设计师还是一个开发者?

如果你得到了一个明确的答案,那就向答案的目标进发吧。

entry 简单的javascript判断浏览器

今天浏览mootoolssvn版本的时候,发现判断浏览器的部分有小更新,并且加入了对操作系统的判断(以下的代码中未包括)

var Client = {
Engine: {'name': 'unknown', 'version': ''},
Features: {}
};

Client.Features.xhr = !!(window.XMLHttpRequest);
Client.Features.xpath = !!(document.evaluate);

if (window.opera) Client.Engine.name = 'opera';
else if (window.ActiveXObject) Client.Engine = {'name': 'ie', 'version': (Client.Features.xhr) ? 7 : 6};
else if (!navigator.taintEnabled) Client.Engine = {'name': 'webkit', 'version': (Client.Features.xpath) ? 420 : 419};
else if (document.getBoxObjectFor != null) Client.Engine.name = 'gecko';
Client.Engine[Client.Engine.name] = Client.Engine[Client.Engine.name + Client.Engine.version] = true;

可能的结果

Client.Engine.ie = true; //IE浏览器,版本不限
Client.Engine.ie6 = true; //IE 6
Client.Engine.ie7 = true; //IE 7
Client.Engine.opera = true; //opera
Client.Engine.gecko = true; //Mozilla/Gecko(包括firefox)
Client.Engine.webkit = true; //Safari
Client.Engine.webkit419 = true; //Safari2
Client.Engine.webkit420 = true; //Safari3

现在你可以用类似这样的代码来执行你的XX Only了 :)

if (Client.Engine.ie) {
IE Only!!!
}