请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 2531|回复: 7

[ 原创 ] 我也浅析阿里巴巴前端招聘考题 [ 另一种解决方案 ] (大家一起进来优化) [复制链接]

macji 楼主

麦鸡

银牌会员

帖子
380
体力
1262
威望
3
居住地
浙江省 杭州市
发表于 2008-2-2 10:55:46 |显示全部楼层
博客阅读 >>

废话不多说,先往下看!


用css布局略过了,我们直接看用 javascript优化布局

由于我们的用户群喜欢放大看页面  

于是我们给上一题的布局做一次优化。  

当鼠标略过某个区块的时候,该区块会放大25%,  

并且其他的区块仍然固定不动。

  

提示:也许,我们其他的布局也会用到这个放大的效果哦。可以使用任何开源代码,包括曾经你自己写的。  

关键字:javascript、封装、复用


放大有什么好处?

把模块放大肯定是为了保证残障人士或者一些特殊群体,同时也给普通用户群带来良好的体验。那放大,肯定是模块里面所有东西都得放大了包括图片等!在蓝色理想论坛已经有人写好了http://bbs.blueidea.com/thread-2824913-1-5.html,但完美主义是挑剔的。帖子写的很好,但如果放大模块上出现图片,他又要在js里面加上图片的放大效果,如果需求有更改,又给加上别的元素,那又要改?那岂不是变的很不灵活?下面我们做一个相对比较灵活的!怎么实现给卖个关子,请往下看

我们先写出布局
  1. <style type="text/css" media="all">  

  2. /* <![CDATA[ */  

  3. body{margin:100px; font-size:62.5%}  

  4. .box1{
  5.   float:left;
  6.   width:200px;  

  7.   font-size:1.2em;
  8.   background:#f30
  9. }  

  10. .box2{
  11.   clear:left;
  12.   float:left;
  13.   width:200px;
  14.   margin-top:10px;  

  15.   font-size:1.2em;
  16.   background:#f60
  17. }  

  18. .box3{
  19.   width:200px;
  20.   margin-left:210px;
  21.   _margin-left:207px; /* ie6 */  

  22.   font-size:1.2em;
  23.   background:#f90
  24. }  

  25. p{margin:0; padding:1em; line-height:180%}
  26. img{width:10em; height:2em; display:block}  

  27. /* ]]> */  

  28. </style>  

  29. <!--这里给出html-->  

  30. <div class="box1" id="container">
  31.   <p>这是第一个可放大内容的区域,里面可能有N多元素和图片等!<img src="http://www.macji.com/wp-content/themes/macji/img/logo.png"   /></p>
  32. </div>
  33. <div class="box2" id="container2">
  34.   <p>这是第一个可放大内容的区域,里面可能有N多元素和图片等!<img src="http://www.macji.com/wp-content/themes/macji/img/logo.png"  /></p>
  35. </div>
  36. <div class="box3">
  37.   <p>这是第三个区域</p><p>这是第三个区域</p><p>这是第三个区域</p><p>这是第三个区域</p>
  38. </div>
复制代码


你看到这里时候,没觉得不一样吧,是的,就是CSS单位都是em(除了布局用px,保证结构不乱),对,这是另一个思路,采用css可变单位em进行子元素控制.也许你就有了头绪吧?

我们把JavaScript封装一下

  1. function zoom (contianer, config){
  2.   this.config = config || {x: 1.25, y: 1.25};
  3.   this.contianer = document.getElementById(contianer);
  4.   var _this = this;  

  5.   this.__construct = function (){ //构造函数
  6.     _this.contianer.onmouseover = function (){_this.over();};
  7.     _this.contianer.onmouseout  = function (){_this.out();};
  8.   }();  

  9.   this.over =  function (){ //鼠标经过
  10.     var obj = _this.contianer;
  11.     var width  = obj.offsetWidth;
  12.     var height = obj.offsetHeight;  

  13.     obj.style.position = 'relative';
  14.     obj.style.zIndex = '100000';
  15.     obj.style.fontSize = 1.2 * _this.config.x + 'em';
  16.     obj.style.width = width * _this.config.x + 'px';
  17.     obj.style.height = height * _this.config.y + 'px';
  18.     obj.style.marginRight = (width - width * _this.config.x) + 'px';
  19.     obj.style.marginBottom = (height - height * _this.config.y) + 'px';
  20.   };  

  21.   this.out = function (){ //鼠标离开
  22.     var obj = _this.contianer;
  23.     obj.style.position = '';
  24.     obj.style.fontSize = '';
  25.     obj.style.zIndex   = '';
  26.     obj.style.width    = '';
  27.     obj.style.height   = '';
  28.     obj.style.marginRight = '';
  29.     obj.style.marginBottom = '';
  30.   };
  31. }
复制代码


是不是很简单啊?调用方法,只需要把要放大的id和放大倍数传进去就可以了!
var container = new zoom(’container’, {x: 1.25, y: 1.25});
var container2 = new zoom(’container2′, {x: 1.25, y: 1.25});

给出演示地址 http://www.macji.com/lab/ali_job.html

[ 本帖最后由 caiying2007 于 2008-2-2 11:50 编辑 ]
西部数码顶级域名注册商39元抢注!
sxnow 

猴子

银牌会员

帖子
503
体力
2322
威望
7
居住地
浙江省 杭州市
发表于 2008-2-2 14:37:06 |显示全部楼层
顶楼主的创意! 我都忘记了em单位了 果然 用em可以少写很多代码呢 参照字体 这个想法好好
不过设图片宽高都用em 总是感觉有点怪怪的

我来点优化意见 直接把new zoom(’container’, {x: 1.25, y: 1.25});写入<div class=" .....>里面 然后去call它

[ 本帖最后由 sxnow 于 2008-2-2 14:45 编辑 ]
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

macji 楼主

麦鸡

银牌会员

帖子
380
体力
1262
威望
3
居住地
浙江省 杭州市
发表于 2008-2-3 11:29:04 |显示全部楼层
直接把new zoom(’container’, {x: 1.25, y: 1.25});写入<div class=" .....>里面

这想法好,但页面就显的不干净了,应该放在一个js文件里面,然后去包含它,这样比较干净,毕竟不是一个人在做项目

使用道具 举报

sxnow 

猴子

银牌会员

帖子
503
体力
2322
威望
7
居住地
浙江省 杭州市
发表于 2008-2-3 22:12:19 |显示全部楼层
不影响的啊 其它class还是生效的 比如<div id="L_1" class="Font_Blue Box_Zoom{Z:'125%',T:true}" ...> 我是这样写的

使用道具 举报

macji 楼主

麦鸡

银牌会员

帖子
380
体力
1262
威望
3
居住地
浙江省 杭州市
发表于 2008-2-4 17:37:56 |显示全部楼层
恩,这样也不错,但我们一直主张着分离

使用道具 举报

mqycn 

勿弃

高级会员

帖子
168
体力
590
威望
2
居住地
山东省 济南市
发表于 2008-2-5 20:23:34 |显示全部楼层
可惜不支持IE7,高手能不能把组合好的代码发出来看看~

[ 本帖最后由 mqycn 于 2008-2-5 20:25 编辑 ]

使用道具 举报

ariex 

Dreamlessness

钻石会员

帖子
4960
体力
13275
威望
11
居住地
大洋洲 澳大利亚
发表于 2008-2-5 20:35:07 |显示全部楼层
谁说不支持IE7,那个测试页我就用着没问题

使用道具 举报

macji 楼主

麦鸡

银牌会员

帖子
380
体力
1262
威望
3
居住地
浙江省 杭州市
发表于 2008-2-5 23:26:26 |显示全部楼层

回复 #6 mqycn 的帖子

这是简单的布局,没有复杂css,支持各种浏览器.

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 13:01 , Processed in 0.101915 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部