Archive for July, 2009

July,31st,2009

利用location.hash实现跨域iframe自适应高宽

页面域关系:
主页面a.html所属域A:www.taobao.com
被iframe的页面b.html所属域B:www.alimama.com,假设地址:http://www.alimama.com/b.html

实现效果:
A域名下的页面a.html中通过iframe嵌入B域名下的页面b.html,由于b.html的宽度和高度是不可预知而且会变化的,所以需要a.html中的iframe自适应大小.

问题本质:
js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读取得到b.html的大小,A、B不属于同一个域,浏览器为了安全性考虑,使js跨域访问受限,读取不到b.html的高度和宽度.

解决方案:
引入代理代理页面c.html与a.html所属相同域A,c.html是A域下提供好的中间代理页面,假设c.html的地址:www.taobao.com/c.html,它负责读取location.hash里面的width和height的值,然后设置与它同域下的a.html中的iframe的宽度和高度.

代码如下:

a.html代码

首先a.html中通过iframe引入了b.html
<iframe id=”b_iframe” height=”0″ width=”0″ src=”http://www.alimama.com/b.html” frameborder=”no” border=”0px” marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes” ></iframe>

b.html代码

<iframe id=”c_iframe”  height=”0″ width=”0″  src=”http://www.taobao.com/c.html” style=”display:none” ></iframe>
<script type=”text/javascript”>
var b_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
var b_height = Math.max(document.body.scrollHeight,document.body.clientHeight);
var c_iframe = document.getElementById(”c_iframe”);
c_iframe.src = c_iframe.src+”#”+b_width+”|”+b_height; //http://www.taobao.com/c.html#width|height”
}
</script>
<!–js读取b.html的宽和高,把读取到的宽和高设置到和a.html在同一个域的中间代理页面车c.html的src的hash里面–>

c.html代码

<script type=”text/javascript”>
var b_iframe = window.parent.parent.document.getElementById(”b_iframe”);
var hash_url = window.location.hash;
var hash_width = hash_url.split(”#”)[1].split(”|”)[0]+”px”;
var hash_height = hash_url.split(”#”)[1].split(”|”)[1]+”px”;
b_iframe.style.width = hash_width;
b_iframe.style.height = hash_height;
</script>
a.html中的iframe就可以自适应为b.html的宽和高了.

其他一些类似js跨域操作问题也可以按这个思路去解决

July,31st,2009

好的产品设计并非始于图片,而是对人的理解

今天想围绕“产品交互设计”说说一些我们的想法,一说到产品设计,我想在坐的各位脑海里肯定联想到了很多表单设计、导航设计、界面布局等等,但是今天我这个篇文章里面没有准备一张截图;这是因为我认为除了这些之外还有更重要的东西值得我们去关注:

那就是我们今天要讲的主题:“好的产品设计并非始于图片,而是对人的理解”。用户喜欢什么、用户来你网站的目的是什么,他们的习惯是什么、他们将如何与之交互。作为设计师,你只有对使用的人了解越多、你才会越对他们移情,这样才能进行更有效的设计。从某个角度上说用户访问你这个网站只是其达到某种目的的一种途径,并非其真正目的,如淘宝客用户到阿里妈妈平台上来获取推广代码,其目的并不是享受一次流畅的取代码过程,而是怎么拿到一串能够容易推销出去的商品推广代码,从而赚到钱。赚到钱才是淘宝客的真正目的;我们只有了解了用户的真正目的,然后更好的帮助用户达到其目的,才能使用户更加喜欢。更加忠于我们的网站!
可以说了解用户是“产品交互设计”的核心,那么如何才能了解用户呢?在此我要和大家分享一些书中的用户调研方法。
1、探索用户心智模型
心智模型是由“Mental model”翻译过来,也可以称为概念模型,说的通俗一点,其实就是人是如何认识、定义一个事物的。在交互设计中很核心的一个环节就是要理解用户的心智模型,因为只有理解了用户是怎么样定义表征一个产品的,才能更好地去挖掘和预测用户的态度,期望,行为。
但是,应当如何理解用户的的心智模型呢?
“The deepest form of understanding another person is empathy…[which] involves a shift from…observing how you seem on the outside, to…imagining what it feels like to be you on the inside.”
上面一段话的意思是说,要理解一个人,最深入的方式是“移情”,不仅要细致地观察,还要将自己代入其中,感受和体会。前断时间吵得沸沸扬扬的百度俞军,他就是一个对产品特“移情”的人,他每天用搜索引擎搜索词汇几百次。站在用户角度充分体验产品,寻找产品可能存在的问题及可以改进的地方;但是需要强调的是这种“移情” 并非简单地研究他人是如何使用产品的。而是要更深入地了解人们要使用产品完成什么,也就是理解人的目标,动机,情感以及其所遵从的哲学和程序。
所以当我们在和用户接触的过程中通过提出一些正确的问题有助于把用户最终目的和设计过程相结合,提高设计的有效率;
曾在书中看到一个关于用户对电子邮箱地理解我觉得很有意思:
1)为什么一位中层经理要使用邮件客户端呢?---当然是收发邮件。
2)那为什么他要收发邮件呢?---当然是为了和别人交流。
3)同别人交流可以通过其他方式达到阿;如:电话、走廊谈话或着什么正是地文件什么的;但是很显然邮件满足了一些其他方式不能满足的需求,那么用户看重电子邮件的哪些特性呢?保护用户隐私、安全性、保留对话内容等等。
4)为什么不在这些特性的基础上加上一些别的通讯工具的特性来完美电子邮件呢??
通过简单的多问几个为什么我们不难找出中层经理要使用电子邮件的真正目的;而Gmail貌似就是根据这样的一条思路在发展其的产品,在最初的收发邮件,到和Gtalk功能结合可以聊天,再到现在邮件可以安装很多插件。Gmail在主功能框架下细化用户的需求,提供更多的可选择性功能来丰富用户需求。
总归一句话:设计师在设计前期的用户调研时要保持好奇心,悉心研究、找出你的用户真正喜欢什么,他们的真实想法和真实感受;
2、用户研究时需要了解的一些基本信息:
背景:用户背景信息是什么?年龄、职业、喜好。
归类用户背景信息,我们可以经验地分析出该人群的特性,宏观的得出一些用户群的行为习惯、喜好等等。
1)动机:是什么需求驱动用户来使用这个产品;
(每个产品的诞生都是迎合用户普遍存在的某种种需求,就象开心网的快速成长就是因为其的许多在线web小游戏能很好的填补许多白领上班时间的空虚和无聊;深入了解用户的潜在需求对产品的发展有很深远的意义。)
2)特性:用户关心这个产品的哪些特性;
(了解产品的特性,做好做强用户关心的特性是留住用户、壮大用户的基础。淘宝客的特性:背靠淘宝大环境,拥有海量的可推广商品,较低的门槛,基本上能上网且在网上有一定社交圈,或着说有一定活动能力的就能使用;)
3)情景:用户在什么情况下来操作;
4)行为:用户如何与产品交互;
5)目标:用户最终想要得到什么;
(淘宝客的最终目标就是能赚钱,而我们是要帮助用户如何赚到钱,如何让用户能很简单的在淘宝客平台拿到一串能使用户赚到钱的商品代码。如何为用户建立更多的信息平台,让用户可以根据自身的情况,找到推广途径和推广商品)
6)习惯:用户一般得操作模式或者说习惯是什么;
一般用户在初次使用软件或网站时候的一些模式:
(1)安全探索 (2)既时满足 (3)满意即可 (4)中途变卦 (5)延后选择 (6)递增构建 (7)习惯 (8)空间记忆 (9)前瞻记忆 (10)简化重复工作 (11)只支持键盘 (12)旁人建议
July,28th,2009

淘宝千万卖家翘首期盼的BannerMaker店招招牌生成器,终于上线啦!

这个凝聚着小二的心血、被淘宝卖家给予了厚望、日产广告牌数超1.7万的新功能,就像是为平凡人插上了一双艺术的翅膀,充分体现了bannermaker的宗旨,为每个梦想成为设计师的有志之人搭建了更加快捷、迅速和充满个性的平台。

只有您是淘宝旺铺会员就可以免费登录使用了
登陆地址:http://ishop.taobao.com/tadget/single_tadget-2692.htm

卖家留言:
upcjokey(设计师)
这样下去 我们是不是要失业了 呵呵,淘宝太绝了

微夏设计
我们还太稚嫩,需要学习,刚看到这个生成器的时候,我们被你们的技术实力震撼了。

风涧凌
看着觉得旺铺的功能还不错啊。有点心动想订购了。

美丽屋369
真的是很实用,以前都不会,现在可是方便多了,天天变化招牌都没问题了。真是感谢那些辛苦制作招牌的亲们了

99蓝兔
已经用上了,这个功能真不错,不用再花钱装修了,还可以经常换,有空到我店里看看效果吧

宝贝尽情淘
很好啊,现在什么都是智能的了,以后就不用学习太繁琐的东西了

好机汇168
大力支持!旺铺可以免费使用,哈哈,省时又省力,对卖家来说是个福音。

supercat77
要是其他页面也能在线制作就好了。其他页面只能更改呢。然后要上传图片。

查看更多淘宝社区的会员,留言总数超过1369次
http://bangpai.taobao.com/g/MTE0MDA5/thread-272442-88-0.htm

做广告牌用“阿里妈妈广告牌生成器”详情地址:http://banner.alimama.com

July,4th,2009

文字彬彬——banner字体设计与应用

字体设计是人类商业活动的需求,它随着时代和科学技术的进步而不断地变化着。被广泛应用于网络生活的各个方面。现代字体设计在电脑技术的应用中已经深入到日常工作、生活的每一个角落。随着工作中各类需求的增多,越来越多类目的广告banner设计对字体的要求也越来越多。要想设计出较好的作品,从电脑里调出来的任何一种标准字体都是不适合的,因为那会造成千遍一律,设计“撞车”的事故,识别性不强的弊端。它要求设计者根据不同需求,不同的设计氛围、生活常识,去捕捉具有准确性、关联性、独特性、可开发性的不同个性的字体,以传递需求的意思和商品特征,这也是平面设计中字体设计的关键所在。可以说认为进行字体设计的训练其本身就是加强设计师的观察能力、思维能力、艺术创造能力培养。同时激发设计师端正字体设计学习热情。music (more…)

July,2nd,2009

window.location.hash的应用及浏览器的支持测试

location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://ued.alimama.com#admin的location.hash=”#admin”,利用这个属性值可以实现很多效果。

case one:锚点触发iframe的url更换
html代码:

<dl id=”tbk_help_list”>
<dt>==成为淘宝客==</dt>
<dd><a href=”#faq_1_1″>什么是淘宝客推广?什么是淘宝客?</a></dd>
<dd><a href=”#faq_1_2″ id=”aaaa”>如何注册成为淘宝客?</a></dd>
<dt>==获取推广代码==</dt>
<dd><a href=”#faq_1_5″>获取单件商品推广代码</a></dd>
<dd><a href=”#faq_1_6″>获取一类商品推广代码</a></dd>
<dd><a href=”#faq_1_7″>获取推广组推广代码</a></dd>
<dd><a href=”#faq_1_8″>获取店铺推广代码</a></dd>
</dl>
<iframe src=”faq_1_1.html” frameborder=”0″ allowtransparency=”yes” scrolling=”auto” width=”700px” id=”contentFrame” name=”contentFrame” height=”600px”></iframe>

javascript代码:

<script type=”text/javascript” src=”http://static.alimama.com/js/mootools.js”></script>
<script type=”text/javascript”>
//锚点触发iframe的url更换
var help_dd_a = $(”tbk_help_list”).getElements(”a”);
function geturl(hs){
var hash = hs ? hs : window.location.hash;
if(hash && hash.length >2){
hash = hash.substr(1);
}
var url = hash + “.html”;
window.frames['contentFrame'].location  = url;
}
help_dd_a.each(function(el){
el.addEvent(”click”,function(){
var str = this.href.substr(this.href.lastIndexOf(”#”));
geturl(str);
});
});
</script>

案例截图,图1-1:hashdemo
case two:各种浏览器对window.location.hash的“前进”、“后退”功能是否支持
说明:通过hash调整地址栏的地址,使得浏览器里边的“前进”、“后退”按钮能正常使用(实质上欺骗了浏览器)。然后再根据hash值的不同来显示不同的面板(用户可以收藏对应的面板了),这就使得Ajax页面的浏览趋于传统化了,但是,是否所有浏览器都支持hash的“前进”、“后退”功能呢?
测试说明:点击图1-1中左栏目菜单,看地址栏的变化和iframe的url的变化来判断浏览器是否支持hash的“前进”、“后退”功能。

浏览器 iframe的url是否改变 地址栏hash值是否改变 是否支持
Mozilla Firefox3.0 改变 改变 支持
Google Chrome2.0 改变 改变 支持
IE6 改变 不改变 不支持
IE7 改变 不改变 不支持
IE8 改变 改变 支持

ps:文中“所有浏览器”指列入测试范围的浏览器
结果:除ie6及以下浏览器、ie7不支持外,其他浏览器都支持hash的“前进”、“后退”功能,同时看客们也发现所有浏览器iframe的url都改变了,那是因为所有浏览器都支持iframe的url缓存,这与hash的缓存不是一个概念,所以排除iframe的url的数据干扰。