前端面试问题 —— html

1、 阻止冒泡
w3c的方法是e.stopPropagation()IE则是使用e.cancelBubble = true

// 设置的时候设为捕获
element.addEventListener(event, function, useCapture)
useCapture默认是false,冒泡阶段。
2、如何改变默认行为

preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为。
元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。

w3c的方法是e.preventDefault()IE则是使用e.returnValue = false;

e.preventDefault ? e.preventDefault() :   window.event.returnValue == false;

原生javascript的 return false只会阻止默认行为.
a.onclick = function(){
    return false;
};
用jQuery的话则既阻止默认行为又防止对象冒泡。
$("#testC").on('click',function(){
    return false;
});
什么元素有默认行为呢?

如链接<a>,总会跳到一个新页面,有时只是要执行js代码,并不用跳转,这时就要阻止默认行为。

提交按钮<input type=”submit”> 默认行为提交表单radio(checkBox点击(选中)之后出现对勾,这是它的默认行为)等表单元素的默认事件 。
当Event 对象的cancelable为false时,表示没有默认行为,这时即使有默认行为,调用preventDefault也是不会起作用的。

//原生js阻止浏览器的默认行为 
function stopDefault( e ) { 
        //阻止默认浏览器动作(W3C) 
    if ( e && e.preventDefault ) {
         e.preventDefault(); 
    }else{
        //IE中阻止函数器默认动作的方式 
        window.event.returnValue = false;
    }
    return false; 
}
举例

<a>消除默认事件的方法

<a href="http://www.baidu.com" onclick="clickEle(this)">使用stopPropagation!</a>
<a href=http://www.baidu.com" οnclick="alert(123);return false">使用return false</a>
<a href="javascript:void(0);">void(0)使地址不发生跳转,不写void(0)也可以使返回为undefined!</a>
<a href="#">#会导致每次点击页面移到最顶部!</a>

function clickEle(e) {
    if (e && e.preventDefault) {
        console.log('阻止默认事件w3c');
        e.preventDefault();
    } else {
        //我用谷歌浏览器执行的是这个,e.preventDefault是undefined?
        console.log('阻止默认事件ie');
        window.event.returnValue = false;
    }
    return false;
}
3、说说行内元素和块级元素

竟然是靠盒子模型来区分,就是设置上下margin,padding无效的就是行内元素。
块级元素对应于display:block. 行内元素对应于display:inline.

4、repaint和reflow什么时候发生
5、当浏览器页面变小时,会发生repaint和reflow吗?

如果写死了宽高就不会变化,如果没写死,整个页面就会发生repaint和reflow。

6、dom和bom区别
7、提高页面加载速度的办法
  1. 减小页面大小
页面的肥瘦是影响加载速度最重要的因素
- 去除不必要的空格、回车、注释。
- 将内联的 css 和 js 移到外部文件
- 页面压缩工具对页面进行压缩,比如:webpack集成的UglifyJS插件,uglifyJsPlugin会拖慢webpack的编译速度,所有建议在开发阶段将其关闭,部署的时候再将其打开。
  1. 减少文件数量
减少页面上引用的文件数量可以减少HTTP连接数。
许多JavaScript、CSS 文件可以合并最好合并成一个js 或者 css。
  1. 减少域名查询
DNS查询和解析域名也是消耗时间的,所以要减少对第三方JavaScript、
CSS、图片等资源的引用,不同域名的使用越少越好。

比如:
引用jqury的两种方式
1 下载代码文件至本地项目中,引入。
2 通过 CDN(内容分发网络) 引用它
其他的包最好用1方式下载,这样减少DNS解析域名的时间。
但jqury用使用CDN引用的一个好处:许多用户在访问其他站点时,已经从百度、又拍云、新浪、谷歌或微软加载过 jQuery。
所有结果是,当他们访问您的站点时,会从缓存中加载 jQuery,这样可以减少加载时间。
同时,大多数 CDN 都可以确保当用户向其请求文件时,会从离用户最近的服务器上返回响应,这样也可以提高加载速度。
  1. 缓存重用数据
对重复使用的数据进行缓存。
  1. 优化页面元素加载顺序
首先加载页面最初显示的内容和与之相关的JavaScript和CSS,然后加载HTML相关的东西,
像什么不是最初显示相关的图片、flash、视频等很肥的资源就最后加载。

js放在body的最后面,减少减少inline JavaScript的数量,浏览器parser会假设
inline JavaScript会改变页面结构,所以使用inline JavaScript开销较大。

6、指定图像和table的大小

a. 如果浏览器可以立即决定图像或table的大小,那么它就可以马上显示页面而不要重新做一些布局安排的工作。
b. 这不仅加快了页面的显示,也预防了页面完成加载后布局的一些不当的改变。
c. image使用height和width。
8、获取鼠标位置
event.clientX / event.clientY
pc端使用mousedown,mousemove,mouseup监听实现。
移动端的方法是touchstart,touchmove,touchend。
移动端获取clientx:
event.changedTouches[0].clientX

获取位置总结
clientX / clientY : 触摸点相对于浏览器视口的位置,(不包含滚动距离)
pageX / pageY : 触摸点相对于页面的位置,(包含滚动距离)
screenX / screenY : 触摸点相对于屏幕的位置

JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别测试

event中的几个属性:
clientX,clientY:鼠标相对于浏览器视口的x,y轴的位置
pageX / pageY: 鼠标相对于页面的x,y轴的位置,当页面没滚动时,pagexy和clientxy的值是相等的
screenX,screenY:鼠标相对于整个屏幕的x,y轴的位置
offsetX,offsetY:鼠标相对于事件源x轴的位置。
比如有个按钮,当你点击时,offsetX,offsetY获取的就是鼠标相对这个按钮的x坐标和y坐标

9、html分类

常用的块状元素有:

<div>、<p>、<h1>...<h6>、<br>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>

常用的内联元素有:

<a>、<span>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>

常用的内联块状元素有:

<img>、<input>

按是否闭合分划分:

闭合标签:
闭合标签是指由开始标签和结束标签组成的一对标签,
这种标签允许嵌套和承载内容,例如<html></html>、<p></p>等。
空标签:
空标签是指没有内容的标签,在开始标签中自动闭合。
常见的空标签有:<br>、<hr>、 <img>、 <input>、 <link> <meta>。

块级元素和行内元素的区别?

1.inline元素设置width,height属性无效
2.inline元素的padding和margin可以设置,
但是padding,margin-right,margin-left都产生了效果,
而垂直方向的margin-bottom,margin-top是没有效果的
(亲测padding-top和padding-bootom是有用的
inline-block:结合了块级元素和行内元素的特性,块级元素排在一行)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值