前端理论知识|移动WEB

Posted WEBlearner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端理论知识|移动WEB相关的知识,希望对你有一定的参考价值。

1. 要你出一套适应不同分辨率,不同终端的前端实现方案你有什么思路?

1. 流式布局:

使用非固定像素来定义网页内容,也就是百分比布局,通过盒子的宽度设置成百分比来

根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充。这样的布局方式,就

是移动web 开发使用的常用布局方式。这样的布局可以适配移动端不同的分辨率设备。

 

2. 响应式开发

那么 EthanMarcotte 2010 5月份提出的一个概念,简而言之,就是一个网站能

够兼容多个终端。越来越多的设计师也采用了这种设计。

CSS3中的 Media Query(媒介查询),通过查询 screen 的宽度来指定某个宽

度区间的网页布局。

超小屏幕(移动设备) 768px以下

小屏设备 768px-992px

中等屏幕 992px-1200px

宽屏设备 1200px 以上

由于响应式开发显得繁琐些,一般使用第三方响应式框架来完成,比如bootstrap

完成一部分工作,当然也可以自己写响应式。

2. px em rem 取用选择依据?

1. px 像素(Pixel。绝对单位。像素px是相对于显示器屏幕分辨率而言的,是一

个虚拟长度单位,是计算机系统的数字化图像长度单位,如果 px要换算成物理长度,需要

指定精度 DPI

2. em是相对长度单位,相对于当前对象内文本的字体尺寸。如当前对行内文本的字

体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。它会继承父级元素的字体大小,因

此并不是一个固定的值。

3. remCSS3新增的一个相对单位(root em,根em),使用 rem 为元素设定字

体大小时,仍然是相对大小,但相对的只是html根元素。

4. 区别:IE无法调整那些使用 px作为单位的字体大小,而em rem可以缩放,rem

相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既

可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁

反应。目前,除了 IE8及更早版本外,所有浏览器均已支持rem

3. ZeptojQuery的区别?

Zepto相对jQuery更加轻量,主要用在移动端,jQuery也有对应的jQuerymobile移动端框架。

实际工作部分



1. 移动端touch事件判断滑屏手势的方向?

当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY

当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这两次获取的坐标差值来判断手指在手机屏幕上的滑动方向。

思路:用touchmove的最后坐标减去touchstart的起始坐标,X的结果如果正数,则说明手指是从左往右划动;X的结果如果负数,则说明手指是从右往左划动;Y的结果如果正数,则说明手指是从上往下划动;Y的结果如果负数,则说明手指是从下往上划动。

具体代码如下:

var mybody = document.getElementsByTagName('body')[0];

 

//滑动处理

var startX, startY, moveEndX, moveEndY, X, Y;

mybody.addEventListener('touchstart', function(e) {

e.preventDefault();

startX = e.touches[0].pageX;

startY = e.touches[0].pageY;

});

mybody.addEventListener('touchmove', function(e) {

e.preventDefault();

moveEndX = e.changedTouches[0].pageX;

moveEndY = e.changedTouches[0].pageY;

X = moveEndX - startX;

Y = moveEndY - startY;

if ( X > 0 ) {alert(‘向右’);}

else if ( X < 0 ) {alert(‘向左’);}

else if ( Y > 0) {alert(‘向下’);}

else if ( Y < 0 ) { alert(‘向上’);}

else{alert(‘没滑动’); }

});

2. 移动端对图片优化有哪些方式,怎么实现?

懒加载,使用CSS Sprites合并为一张大图,首先从图片格式方面着手,webp(google官方网址)是谷歌推出的一种图片格式,优点在于同等画面质量下,体积比jpgpng少了25%以上,去掉无意义的修饰,使用矢量图替代位图。

按照HTTP协议设置合理的缓存。

详见链接 http://web.jobbole.com/81766/

3. rem布局中的尺寸是怎样计算的,实际举例说明一下?

其实rem布局的本质是等比缩放,一般是基于宽度,试想一下如果UE图能够等比缩放,假设我们将屏幕宽度平均分成100份,每一份的宽度用x表示,x = 屏幕宽度 / 100,如果将x作为单位,x前面的数值就代表屏幕宽度的百分比。



四、javascript高级模块

基础部分

1. 说说你对this关键字的理解?

this 是一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内 部使用。

1.作为纯粹的函数调用 this 指向全局对象

2.作为对象的方法调用 this 指向调用对象

3.作为构造函数被调用 this 指向新的对象(new会改变 this 的指向)

4.apply 调用 this 指向 apply方法的第一个参数

2. 表单验证传输的什么数据?明文还是暗文==加密?如何加密?是每一次传输数据,都是加密之后才传输吗?

1. 概述: GET是从服务器上请求数据,POST 是发送数据到服务器。事实上,GET方法是把数 据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说, name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换 成十六进制的代码。因为这一队列在 URL里边,这样队列的参数就能看得到,可以被记录 下来,或更改。通常GET 方法还限制字符的大小(大概是 256 字节 )。事实上POST 方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到 这一过程的,所以 POST方法比较适合用于发送一个保密的(比如信用 卡号)或者比较大 量的数据到服务器。

2. 区别: Post 是允许传输大量数据的方法,而 Get 方法会将所要传输的数据附在网址后面,然 后一起送达服务器,因此传送的数据量就会受到限制,但是执行效率却比 Post 方法好。

3. 总结:

1get 方式的安全性较Post 方式要差些,包含机密信息的话,建议用 Post 数据提交 方式;

2、在做数据查询时,建议用 Get 方式;而在做数据添加、修改或删除时,建议用Post 方式;

4. 所以: 表达如果是向服务器传输数据(如帐号密码等)都是加密数据(post),如果只是单单想要 从服务器获得数据或者传输的数据并不重要, 可以直接使用明文方式传输( get )

3. 如何实现跨域?

JSONP(JSON with Padding 填充式JSON 或参数式 JSON)

js 中,我们虽然不能直接用XMLHttpRequest 请求不同域上的数据,但是在页面上引入不同域上的js 脚本文件却是可以的,jsonp正是利用这个特性来实现的。

JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传入回调函数中的JSON 数据。

优点: 它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest ActiveX 的支持; 能够直接访问响应文本,支持在浏览器与服务器之间双向通信

缺点: JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些 恶意代码,而此时除了完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己 运维的Web 服务时,一定得保证它安全可靠。 它只支持 GET请求而不支持 POST等其它类型的 HTTP 请求;它只支持跨域 HTTP 请 求这种情况,不能解决不同域的两个页面之间如何进行 JavaScript调用的问题

4. 说说事件委托机制?这样做有什么好处?

事件委托,就是某个事件本来该自己干的,但是自己不干,交给别人来干。就叫事件委 托。打个比方:一个button 对象,本来自己需要监控自身的点击事件,但是自己不来监控这个点击事件,让自己的父节点来监控自己的点击事件。

优点:

提高性能:列如,当有很多 li同时需要注册事件的时候,如果使用传统方法来注册 事件的话,需要给每一个 li 注册事件。然而如果使用委托事件的话,就只需要将事件委托给 该一个元素即可。这样就能提高性能。

新添加的元素还会有之前的事件;

5. callapply的区别?

它们的共同之处:都“可以用来代替另一个对象调用一个方法,将一个函数的对象上 下文从初始的上下文改变为由 thisObj 指定的新对象。”

它们的不同之处:

Apply:最多只能有两个参数——新this 对象和一个数组 argArray。如果给该方法传递多 个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。如 果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray thisObj 任何一个参数,那么 Global 对象将被 用作 thisObj, 并且无法被传递任何参数

Call:则是直接的参数列表,主要用在js 对象各方法互相调用的时候,使当前 this 实例指 针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj

6. JS的计时器运行原理是怎样的,为什么可以触发计时效果? 计时器是多线程吗?

1. javascript引擎只有一个线程,强迫异步事件排队等待被执行。

2. setTimeout setInterval 本质上不同的地方是他们如何执行异步代码的。

3. 如果一个定时器正在执行的时候被阻塞了,那么它将会被推迟到下一个可能的执行点,这既是使得延迟时间有可能会超过声明定时器时设置的值。

4. Interval 如果有足够的时间来执行(大于制定的延迟),那么它将会无延迟的一个紧 接着一个执行。

5. 原理: 计时器通过设定一定的时间段(毫秒)来异步的执行一段代码。因为 Javascript 是一 个单线程语言,计时器提供了一种绕过这种语言限制来执行代码的能力。

6. 总结: 计时器是单线程的, 需要等待上一个执行完, 如果上一个没有执行完, 下一个需要 延迟执行, 直到上一个执行完。

7. 什么是事件的冒泡和捕获?

事件冒泡:子元素事件的触发会影响父元素事件;

开关事件冒泡:

A,开启事件冒泡:element.addEventListener(eventNamehandlerfalse)

B,关闭事件冒泡:假设传统方式事件的返回值为 e,就可以通过 e.stopPropagation()来关闭事件冒泡;

事件捕获:父元素的事件会影响子元素的事件;

开启事件捕获:element.addEventListener(eventNamehandlertrue)

8. 面向对象和类的区别?

简单的说类是对象的模版。

js 中没有类, 所以在js 中所谓的 类 就是构造函数, 对象就是由构造函数创建

出来的实例对象。面向对象就是使用面向对象的方式处理问题, 面向对象是对面向过程进

行封装。

面向对象有三大特性

抽象性, 需要通过核心数据和特定环境才能描述对象的具体意义

封装性, 封装就是将数据和功能组合到一起, js 中对象就是键值对的集合, 对象

将属性和方法封装起来, 方法将过程封装起来

继承性,将别人的属性和方法成为自己的,传统继承基于模板()js 中继承基于 构

造函数



实际工作部分

1. JavaScript 中的垃圾回收机制?

Javascript 中,如果一个对象不再被引用,那么这个对象就会被GC 回收。如 果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。 因为函数 ab引用,b又被 a外的 c引用,这就是为什么 函数 a 执行后不会被回收的原 因。

2. 列出3条以上 FF IE 的脚本兼容问题

1. window.event

表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象

2. 获取事件源

IEsrcElement获取事件源,而FFtarget获取事件源

3. 添加,去除事件

IEelement.attachEvent(onclick,function)    element.detachEvent(onclick, function)

FFelement.addEventListener(click,function, true) element.removeEventListener(click, function, true)

4. 获取标签的自定义属性

IEdiv1.valuediv1[value]

FF:可用div1.getAttribute(value)

3. 用正则表达式,写出由字母开头,其余由数字、字母、下划线组成的6~30的字符串?

/^[a-zA-Z]{1}[\w]{5,29}$/

4. 下列JavaScript代码执行后,iNum的值是多少?

- [ ] var iNum = 0;

for(var i = 1; i < 10; i++){

if(i% 5 == 0){

continue;

}

iNum++;

}

答:8

5. 程序中捕获异常的方法?

window.error

try{}catch(error){}finally{}

6. 正则匹配邮箱?

/^([a-zA-Z0-9-])+@([a-zA-Z0-9-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

7. Javascriptcalleecaller的作用?

caller是返回一个对函数的引用,该函数调用了当前函数;

callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

8. 下列代码的输出结果

function f1(){

var tmp = 1;

this.x = 3;

console.log( tmp );

console.log( this.x );

}

var obj = new f1();

console.log( obj.x );

console.log( f1() );

首先看代码(1),这里实例话化了f1这个类。相当于执行了 f1函数。所以这个时候 A 会输出 1, 而 B 这个时候的 this 代表的是实例化的当前对象 obj ,B 输出 3

代码(2)毋庸置疑会输出 3

重点 代码(3)首先这里将不再是一个类,它只是一个函数。那么 A输出 1B呢?这里的this 代表的其实就是window对象,那么this.x 就是一个全局变量 相当于在外部 的一个全局变量。所以B 输出 3。最后代码由于f没有返回值那么一个函数如果没返回值的话,将会返回 underfined ,所以答案就是 : 13313underfined

9. 下面代码输出结果?

function changeObjectProperty(o){

o.siteUrl = "http://www.csser.com/";

o = new Object();

o.siteUrl = "http://www.popcg.com/";

}

var CSSer = new Object();

changeObjectProperty( CSSer );

console.log( CSSer.siteUrl );

答:"http://www.popcg.com/"



五、jQuery模块

基础部分

1. 谈谈你对jQuery的理解?

JQuery 是继 prototype 之后又一个优秀的 Javascript 库。它是轻量级的js 库 ,它

兼容 CSS3,还兼容各种浏览器(IE 6.0+FF1.5+Safari 2.0+Opera 9.0+),jQuery2.0

及后续版本将不再支持 IE6/7/8 浏览器。jQuery 使用户能更方便地处理 HTML(标准通用

标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供 AJAX 交互。

jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,

同时还有许多成熟的插件可供选择。jQuery 能够使用户的 html页面保持代码和 html 内容

分离,也就是说,不用再在 html里面插入一堆 js 来调用命令了,只需要定义 id即可。

jQuery 是一个兼容多浏览器的 javascript 库,核心理念是write lessdo more(

得更少,做得更多)jQuery是免费、开源的,使用 MIT 许可协议。jQuery 的语法设

计可以使开发更加便捷,例如操作文档对象、选择 DOM 元素、制作动画效果、事件处理、

使用 Ajax 以及其他功能。除此以外,jQuery 提供 API让开发者编写插件。其模块化的使

用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。

2.原生JSwindow.onloadJquery$(document).ready(function() {})$(function () {})有什么不同?

1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()DOM 结构绘制完毕后就执行,不必等到加载完毕。

2.编写个数不同 window.onload不能同时编写多个,如果有多个 window.onload 方法,只会执 行一个 $(document).ready()可以同时编写多个,并且都可以得到执行

3.简化写法 window.onload没有简化写法

$(document).ready(function (){})

可以简写成$(function(){})

3. jQuery一个对象可以同时绑定多个事件,是如何实现的?

jQuery可以给一个对象同时绑定多个事件,低层实现方式是使用addEventListnerattachEvent兼容不同的浏览器实现事件的绑定,这样可以给同一个对象注册多个事件。

4. jQuery.fninit方法返回的this指的是什么对象?为什么要返回this

this执行init构造函数自身,其实就是jQuery实例对象,返回this是为了实现jQuery的链式操作

5. jQuery.extendjQuery.fn.extend有什么区别?

Jquery.extend用来扩展jQuery对象本身;jquery.fn.extend用来扩展jQuery实例



实际工作部分

1. jQuery框架中$.ajax()的常用参数有哪些?写一个post请求并带有发送数据和返回数据的样例?

async是否异步

contentType发送信息至服务器时内容编码类型

data发送到服务器的数据

dataType预期服务器返回的数据类型

type请求类型

success请求成功回调函数

error请求失败回调函数

$.ajax({

url: "/jquery/test1.txt",

type: 'post',

data: { id: 1 },

success: function ( data ) { alert(data); }

})

2. 举一下jquery中的函数,这些函数实现链式编程的原理?

togglefn, fn

$(“td”).toggle

function(){

$this.addClass(“selected”);

}

function(){

$this.removeClass(“selected”);

实现函数链式编程的原理:返回自身,其他过程在函数内部实现,其好处是:节约js代码,返回的是同一个对象,提高代码的效率。

 


以上是关于前端理论知识|移动WEB的主要内容,如果未能解决你的问题,请参考以下文章

一 APPIUM基本理论知识

接口测试理论知识

移动web性能优化从入门到进阶

前端面试题及答案,理论知识

Web自动化测试理论知识

Vite理论知识笔记一