【web前端面试题整理01】各位加班累了吧,来做点前端面试题吧

简介:
前言

最近小叶子有点疲惫,主要是在外地工作生活上不太适应,吃一样的东西,我居然会拉肚子,而且是一个星期一个星期的。。。。

脸上长了一个豆豆一个星期还没消,我那个去啊。

昨天上午上班后,本来想继续研究javascript方面的东西的,但是下午要开会,结果一开就是4.5小时,哎哟,我那个怎么感觉很累啊,

明明是坐着的啊,开完会腰酸背痛的,回来吃过饭,本来想接着学习,却迷迷糊糊的睡着了......

按照进度我们本来想要开始做小窗口的,但是也碰到点问题,除了各大微博,其它数据全部是RSS,与我想象的数据源不一样,所以这块还需要点时间,加之今天起来还是有点疲惫,那我们不如这个周末就休息下吧,来做几道有意思的面试题好了,当是对前面学习的总结好了。

事情不顺利不要紧,我们一步一步来,没有什么事情做不完的。

布局类

让我们一起来做一个页面

首先,我们需要一个布局。

请使用CSS控制3个div,实现如下图的布局。



我们前面已经学了很多CSS方面的东西了,我们现在来看看这道题,我们会怎么做呢?

这道题限制了只能使用三个div,并且我多float布局比较厌恶,所以第一步应该不会采用float,但是也必须考虑各个浏览器的兼容性,于是我第一份答案出来了:

复制代码
 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4     <style type="text/css">
 5         body { margin: 0; }
 6         div { background-color: Gray; color: White; text-align: center; }
 7         .main { margin-left: 310px; height: 350px; }
 8         .sidebar1 { width: 300px; height: 200px; position: absolute; top: 0; }
 9         .sidebar2 { width: 300px; height: 140px; position: absolute; top: 210px;  }
10         
11     </style>
12 </head>
13 <body>
14     <div class="main">main
15     </div>
16     <div class="sidebar1">sidebar1
17     </div>
18     <div class="sidebar2">sidebar2
19     </div>
20 </body>
21 </html>
复制代码


各位看到了,虽然我比较像用inline-block,但是实施起来时候发现有点困难,并且我这里想到了其它东西:

主要内容优先原则,不管是怎样的布局,我的main内容皆应该放到最前面,优先加载,这也对后面将之改成响应式布局有好处。

这样做还有一个好处便是,我们主要内容若是临时要在左边的话,改起来也必将方便,不要动到html结构。

好了,我们现在来看看有没有其它方法,比如float:

复制代码
 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4     <style type="text/css">
 5         body { margin: 0; }
 6         div { background-color: Gray; color: White; text-align: center; }
 7         .main { margin-left: 310px; height: 350px; }
 8         .sidebar1 { width: 300px; height: 200px; float: left; }
 9         .sidebar2 { width: 300px; height: 140px; float: left; clear: left; margin-top: 10px;  }
10         
11     </style>
12 </head>
13 <body>
14     <div class="main">main
15     </div>
16     <div class="sidebar1">sidebar1
17     </div>
18     <div class="sidebar2">sidebar2
19     </div>
20 </body>
21 </html>
复制代码


有以下几个问题:

① 因为我们主要区域在前,所以后面两个浮动元素要改变位置才行,这与我们主要内容在前规则违背

② 若是此处主要内容要显示在左边的话,原来的CSS与HTML结构皆需改变

③ 浏览器兼容问题,原来的做法是没有兼容问题的,这里使用float不久后IE6下又会莫名其妙的搞好多问题出来(IE3像素,清楚浮动)

所以就这块布局来说,我是不会使用float布局的。

PS:哪位大哥有不同的意见请一定留言

第二部分:用javascript优化布局

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

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

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

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



于是我们来看看这道题第二个需求,他要鼠标划上扩大25%,根据我们布局1的话,这个题应该比较简单,而且某些情况下也许链js都不必使用了,但是我们这里不管他:

PS:各位请不要小看这一块,你认真做了的话,他会让你感受到,没jquery并且没有形成自己库的渺小,单单是设置样式,设置class都会费尽很多

 View Code


这个代码有很多问题,其实我本意也不完全是这个意思啦,其实要做好这道题我觉得应该做好以下几个事情:

① 封装获取dom的函数

② 封装操作dom属性的函数

③ 封装操作class的函数

④ 封装事件绑定的函数

有了以上几块后,这道题便很简单了,所以我们这里还是来封装以下吧。。。虽说我还真没全部写过,没有jquery操作dom真讨厌。。。

复制代码
 1 function getById(id) {
 2 
 3 }
 4 
 5 function getAttr(el, k) {
 6 
 7 }
 8 
 9 function setAttr(el, k, v) {
10 
11 }
12 
13 function addClass(el, k) {
14 
15 }
16 
17 function removeClass(el, k, v) {
18 
19 }
20 
21 function getStyle(el, k) {
22 
23 }
24 
25 function setStyle(el, k, v) {
26 
27 }
28 
29 function addEvent(el, type, func) {
30 
31 }
32 
33 function removerEvent(el, type, func) {
34 
35 }
复制代码
以下附上实现的代码:

首先来几个简单的:

复制代码
 1 function getById(id) {
 2     return id ? document.getElementById(id) : null;
 3 }
 4 
 5 function getAttr(el, k) {
 6     if (el) {
 7         return el.getAttribute[k];
 8     }
 9     return null;
10 }
11 
12 function setAttr(el, k, v) {
13     if (el) {
14         el.setAttribute(k, v);
15     }
16 }
17 
18 function addClass(el, k) {
19     if (el) {
20         var arr = el.className.split(' ');
21         var arrClass = [];
22         var isExist = false;
23         for (var i = 0, len = arr.length; i < len; i++) {
24             if (arr[i] != '') arrClass.push(arr[i]);
25             if (arr[i] == k) {
26                 isExist = true;
27                 break;
28             }
29         }
30         if (isExist == false) {
31             arrClass.push(k);
32             var cls = arrClass.join(' ');
33             el.className = cls;
34             setAttr(el, 'class', cls)
35         }
36     }
37 }
38 
39 function removeClass(el, k) {
40     if (el) {
41         var arr = el.className.split(' ');
42         var arrClass = [];
43         for (var i = 0, len = arr.length; i < len; i++) {
44             if (arr[i] != '' && arr[i] != k) arrClass.push(arr[i]);
45         }
46 
47         var cls = arrClass.join(' ');
48         el.className = cls;
49         setAttr(el, 'class', cls)
50     }
51 }
复制代码
我们看到,firefox可以获取class列表,而ie几个浏览器只有className这一属性,所以操作class时候我们要用到。

但是获取当前样式却比较麻烦,还需要计算各个样式表的比重,我们这里用不到就暂时忽略了。

以上简单测试了一番,基本没有问题,我最后加上事件绑定,便暂时告一段落。

复制代码
 1 function addEvent(el, type, func) {
 2     if (el) {
 3         if (el.attachEvent) {
 4             el.attachEvent('on' + type, func);
 5         } else {
 6             el.addEventListener(type , func, false);
 7         }
 8     }
 9 }
10 
11 function removerEvent(el, type, func) {
12     if (el) {
13         if (el.attachEvent) {
14             el.detachEvent('on' + type, func);
15 
16         } else {
17             el.removeEventListener(type, func, false);
18         }
19     }
20 }
复制代码
以上是很简陋的做法,若是要完全解决兼容性方法,需要call篡改IE事件中this指向,以及传入的e参数,但是那样对删除事件有提出了麻烦,我们这里便不管他了。

结语

今天状态不佳,暂时这样了吧,先去吃个饭再说。

您可以考虑给小钗发个小额微信红包以资鼓励 




本文转自叶小钗博客园博客,原文链接http://www.cnblogs.com/yexiaochai/p/3150609.html,如需转载请自行联系原作者
相关文章
|
2月前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
82 3
|
2月前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
56 6
|
2月前
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
2月前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
2月前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
51 3
|
2月前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
90 2
|
2月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
78 1
|
3月前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
101 0
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
3月前
|
存储 前端开发 JavaScript
从 Web 2.0 到 Web 3.0:前端开发的历史与未来
【10月更文挑战第4天】本文探讨了从 Web 2.0 到 Web 3.0 的前端开发演变过程。Web 2.0 时代,前端开发者从静态网页设计走向复杂交互,技术框架如 jQuery、React 和 Vue 带来了巨大的变革。而 Web 3.0 以区块链技术为核心,带来了去中心化的互联网体验,前端开发者面临与区块链交互、去中心化身份验证、分布式存储等新挑战。文章总结了 Web 2.0 和 Web 3.0 的核心区别,并为开发者提供了如何应对新技术的建议,帮助他们在新时代中掌握技能、设计更安全的用户体验。
96 0
从 Web 2.0 到 Web 3.0:前端开发的历史与未来

热门文章

最新文章