当前位置:首页 » 网页前端 » 前端开发事件模型
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端开发事件模型

发布时间: 2022-11-16 22:20:45

㈠ 想学web前端需要学什么知识

随着互联网的发展,各种小程序、APP以及很多的互联网+创业公司的兴起,对现在前端工程的要求也越来越高,如何适应目前IT行业时代的发展趋势,web前端工程师又需要掌握那些技能呢?

一、HTML5+CSS3

HTML是网页的主要组成部分,网页的本质就是HTML,是用来制作超文本文档的简单标记语言;CSS样式是对HTML语言的有效补充,通过使用CSS样式,便于页面的修改以及页面风格的统一,还可以减少页面的体积,通过HTML和CSS完成静态页面的布局。HTML5+CSS3是HTML+CSS的更新,增加了很多非常实用的功能。这部分主要是从PC端和移动端两方面掌握整体的页面布局技术,并且配合项目实战操练、学以致用。

二、JS交互设计

这一部分主要掌握JS的基本语法、算法和高级语法,熟练使用面向对象的思想进行DOM编程,通过JQuery经典案例学习精通JQuery技术。

通过以上介绍,相信大家都了解了web前端开发需要学习的内容了,现在随着行业而发展,对前端的要求也越来越高,对高端人才的需求也越来越多,只有大家掌握的知识越多,掌握的技能越全面,越好,之后的选择权才会更多,发展前景更好。

㈡ 关于前端的几个知识点,劳烦知友帮忙解答一下

1、DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
document.documentElement 返回文档的根节点<html>
document.body <body>
document.activeElement 返回当前文档中被击活的标签节点(ie)
event.fromElement 返回鼠标移出的源节点(ie)
event.toElement 返回鼠标移入的源节点(ie)
event.srcElement 返回激活事件的源节点(ie)
event.target 返回激活事件的源节点(firefox)
当前对象为node
返回父节点:node.parentNode, node.parendElement,
返回所有子节点:node.childNodes(包含文本节点及标签节点),node.children
返回第一个子节点:node.firstChild
返回最后一个子节点: node.lastChild
返回同属上一个子节点:node.nextSibling
返回同属下一个子节点:node.previousSibling
parentNode和parentElement功能一样,childNodes和children功能一样。但是parentNode和
childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持
,所以大家只要记得有parentElement和children就行了

2、DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
(1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
(2)添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore()
(3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性

3、事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
IE 5.5: div -> body -> document
IE 6.0: div -> body -> html -> document
Mozilla 1.0: div -> body -> html -> document -> window
(2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。
(3)DOM事件流:同时支持两种事件模型:捕获型事件和冒泡型事件,但是,捕获型事件先发生。两种事件流会触及DOM中的所有对象,从document对象开始,也在document对象结束。
DOM事件模型最独特的性质是,文本节点也触发事件(在IE中不会)。

4、XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
XMLHttpRequest 对象提供了在网页加载后与服务器进行通信的方法。

<script type="text/javascript">
varxmlhttp;
functionloadXMLDoc(url){
xmlhttp=null;
if(window.XMLHttpRequest){ //code for all new browsers
xmlhttp=newXMLHttpRequest();
}elseif(window.ActiveXObject){ //code for IE5 and IE6
xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
}
if(xmlhttp!=null){
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}else{
alert("Your browser does not support XMLHTTP.");
}
}

functionstate_Change(){
if(xmlhttp.readyState==4){ //4 = "loaded"
if(xmlhttp.status==200){ //200 = OK
//...our code here...
}else{
alert("Problem retrieving XML data");
}
}
}
</script>

5、严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
在标准模式中,浏览器根据规范呈现页面;
在混杂模式中,页面以一种比较宽松的向后兼容的方式显示。
浏览器根据DOCTYPE是否存在以及使用的哪种DTD来选择要使用的呈现方法。如果XHTML文档包含形式完整的DOCTYPE,那么它一般以标准模式
呈现。对于HTML
4.01文档,包含严格DTD的DOCTYPE常常导致页面以标准模式呈现。包含过渡DTD和URI的DOCTYPE也导致页面以标准模式呈现,但是有过
渡DTD而没有URI会导致页面以混杂模式呈现。DOCTYPE不存在或形式不正确会导致HTML和XHTML文档以混杂模式呈现。

6、盒模型——外边距、内边距和边框之间的关系,IE 8以下版本的浏览器中的盒模型有什么不同。
一个元素盒模型的层次从内到外分别为:内边距、边框和外边距
IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框

7、块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
块级元素,用CSS中的display:inline;属性则变为行内元素
行内元素,用CSS中的display:block;属性则变为块级元素
影响:周围元素显示在同一行或换行显示,根据具体情况调整样式

8、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
需要浮动的元素可使用CSS中float属性来定义元素的浮动位置,left:往左浮动,right:往右浮动
浮动元素引起的问题:
(1)父元素的高度无法被撑开,影响与父元素同级的元素
(2)与浮动元素同级的非浮动元素会跟随其后
(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
解决方法:
使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:
.clearfix:after{content: ".";display: block;height: 0;clear: both;visibility: hidden;}
.clearfix{display: inline-block;} /* for IE/Mac */

9、HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
主要区别:
XHTML 元素必须被正确地嵌套
XHTML 元素必须被关闭,空标签也必须被关闭,如 <br> 必须写成 <br />
XHTML 标签名必须用小写字母
XHTML 文档必须拥有根元素
XHTML 文档要求给所有属性赋一个值
XHTML 要求所有的属性必须用引号""括起来
XHTML 文档需要把所有 < 、>、& 等特殊符号用编码表示
XHTML 文档不要在注释内容中使“--”
XHTML 图片必须有说明文字
XHTML 文档中用id属性代替name属性

10、JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value
pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表
(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

㈢ web前端开发要学些什么东西,以及学习顺序,求大佬解答,谢谢了。

前端行业的薪资居高不下,对于想入门的小白却不知道如何学起,今天爱前端考拉老师告诉你小白如何开启前端学习以及需要掌握哪些知识点。
学习对象:0基础,对互联网充满热情,想要从事H5前端开发、全栈开发的学员;

第一阶段 互联网基本原理和HTML
互联网基本原理、服务器、浏览器、HTTP请求的概念。编程工具介绍、HTML简介。HTML语义化标签、p标签和h系列标签。HTML基本骨架深入、HTML骨架、HTML和XHTML的区别。元信息标记meta、设置页面关键字、字符集、关键字、页面描述。a标签和img标签,相对路径、绝对路径。ul、ol、dl标签、div和span标签、较不常用HTML标签简介。表单、提交表单action、传送方法method、插入表单对象。HTML注释、HTML字符实体。
第二阶段CSS基础和高级技巧
选择器。文字属性、颜色属性。继承性和层叠性,权重计算。CSS盒模型,width、height、padding、border、margin属性。父子嵌套模型,使用Fireworks精确还原设计图。float浮动属性、浮动的意义、清除浮动的方法。浏览器兼容,CSS hack。 background系列属性、css精灵、网页上透明。超级链接的伪类、导航条。 position定位、定位小技巧。DIV+CSS布局。
第三阶段 静态网站制作项目
通过以上两个阶段的学习可以达到制作网页的水平,学习要求。需要掌握搜索引擎优化的概念、页面常用SEO技巧、学会有格调的制作页面。iconfont字体图标。一些常见的CSS高级技巧,比如负margin、压线技术、滑动门、列自撑技术。较复杂布局网站的学习,学习制作2~3个页面。通栏banner、大背景等时下流行的网站制作方法。精美企业站赏析、制作
第四阶段JavaScript基础
语句、执行顺序、词法结构、标识符、关键字、变量、常量、alert语句和console控制台。值和变量、数字、文本、布尔值、null和undefined。表达式和运算符、运算符概述。流程控制、赋值语句、条件判断语句、if语句、if语句的嵌套、switch语句、循环控制语句、while语句、do…while语句、for循环。跳转语句:continue语句、break语句。函数、参数、返回值、递归、作用域、全局变量、局部变量。内部对象、数组、字符串。
第五阶段JavaScript DOM编程
事件与事件处理概述、事件与事件名称、常用事件、事件处理程序的调用、DOM事件模型、事件流、 事件对象、注册与移除事件。文档对象的常用属性、方法与事件、输出数据。事件的三要素。DOM对象、DOM概述、DOM分层、DOM级别、DOM对象节点属性、遍历文档树、克隆删除替换。动画基础知识、定时器、setInterval和setTimeout、运动效果、 实用的动画、制作运动效果案例
第六阶段jQuery页面特效
jQuery对象和DOM对象、jQ选择器、CSS操作、设置和获取HTML、文本和值。事件、加载DOM、事件绑定、合成事件、事件对象的属性。动画、自定义动画方法、动画回调函数、停止动画、其他动画方法。jQuery对表单、表格的操作及更多应用、表单应用、表格应用。jQuery插件,jQueryUI,jQuery ease,jQuery mousewheel等。超多页面特效!结合案例掌握了解jQuery插件的使用。
第七阶段JavaScript进阶
命名空间、对象扩展、数组化、主流框架引入的机制——domReady、无冲突处理。语言模块、字符串的扩展与修复、数组的扩展与修复、数值的扩展与修复、函数的扩展与修复、 日期的扩展与修复、浏览器嗅探与特征侦测 、判定浏览器、事件的支持侦测、样式的支持侦测。类工厂、JavaScript对类的支撑、各种类工厂的实现。浏览器内置的寻找元素的方法、属性模块、如何区分固有属性与自定义属性。
第八阶段HTML5和CSS3
HTML5概述、HTML5新特性、HTML5组织、HTML5构成、HTML5页面的特征、HTML基础、HTML5全局属性、HTML5其他功能、HTML5元素分类。实战HTML5表单、新增的input输入类型。HTML5音频与视频、HTML5多媒体技术概述、在HTML5中播放音频。CSS3编码规范、了解CSS3新增特性。CSS选择器、属性选择器、结构伪类选择器、UI伪类选择器。旋转动画、缩放动画、移动动画、倾斜动画。3D炫酷动画效果实战。
第九阶段移动web和响应式网页
视口、缩放 、分辨率、物理分辨率、设备像素比、dppx和dpi 、meta视口。百分比布局、流式布局、CSS3新的流式盒模型。触摸和指针事件、触摸事件、手势事件 、其他事件、拖放、滚动层、事件和交互模式、移动端交互综合实战。zepto.js、jQuery Mobile等移动端常见框架。HTML5速成移动端框架。Bootstrap3 、调整响应式导航条断点。移动优先、Bootstrap栅格系统、栅格系统原理、Bootstrap中的JavaScript交互、Bootstrap敏捷开发。
第十阶段服务器知识和PHP入门
后台语言和前台语言的区别。初识PHP、PHP语言的优势、PHP 5的新特性、PHP的发展趋势、PHP的应用领域。 PHP环境搭建和开发工具。PHP语言基础、PHP变量、PHP运算符、 PHP的表达式、PHP编码规范、流程控制语句、字符串操作、PHP数组、 PHP与Web页面交互。数据库技术概述、增删改查。
第十一阶段Ajax企业项目实战开发
Ajax概述与Ajax初体验、Ajax技术介绍、XMLHttpRequest对象详解、动态加载和显示数据、XMLHttpRequest对象概述、方法、属性、发送请求、GET和POST请求、运行周期、使用JSON响应、Ajax实用包的封装。JSON的解析、Underscore模板引擎、模板技术、动态组装页面、电话号码归属地查询、验证码等。Ajax实战篇 、Ajax高级表单验证程序 、Ajax动态联动菜单、瀑布流。
第十二阶段JavaScript面向对象
创建对象、属性的查询和设置、 删除属性、检测属性、枚举属性、属性getter和setter、属性的特性、对象的三个属性、序列化对象、对象方法。类和模块、类和原型、类和构造函数、类的扩充、类和类型、子类。原型、实例化和原型、 对象实例化、通过构造器判断对象、继承与原型链、构造函数和原型对象 、构造函数、原型对象 、[[Prototype]]属性 、在构造函数中使用原型对象 、改变原型对象、内建对象的原型对象。
第十三阶段canvas动画和手机游戏
Canvas绘图、基本知识、理解canvas坐标系、获取canvas环境上下文、理解路径、路径操作API 、绘制线条 、绘制矩形 、绘制圆弧 、绘制贝塞尔曲线 、线条属性 、线条颜色 、填充 、绘图状态。图像API、使用canvas绘制图像、坐标变换、绘制文字。游戏原理、制作2D游戏引擎、理解游戏循环、渲染引擎实现、使用引擎构建游戏实例、游戏常用算法。
第十四阶段Node.js企业项目开发
Node的特点、异步I/O、事件与回调函数、单线程、跨平台、Node的应用场景、I/O密集型、CommonJS规范、Node的模块实现、路径分析和文件定位、模块编译、核心模块、JavaScript核心模块的编译过程、网络编程、构建TCP服务。构建HTTP服务、构建WebSocket服务、网络服务与安全。MongoDB、Express、Mongoose、socket.io。小型微博系统、俄罗斯方块对战。Linux使用。
第十五阶段信小程序
小程序概述、 小程序开发账户的注册、获得AppId下载使用开发者工具、认识默认的文件夹结构、appjson配置、双大括号差值和MVVM模式、小程序操作数字、小程序API起步、案例调色板、案例微博发布框、for循环指令、if判断指令和复选按钮组、阿里云服务器开通、请求服务数字和发出改变数字、get请求信息流案例、post请求和图片上传、数据库mogodb、班级说说
第十六阶段ECMAScript2016
简介、let和const命令、变量的解构赋值、字符串的扩展、正则的扩展、数值的扩展、数组的扩展、函数的扩展、对象的扩展、Symbol、Set和Map数据结构、Proxy、Reflect、Iterator和for...of循环、Generator函数、Promise对象、异步操作和Async函数、Class、Decorator、Mole、编程风格、读懂规格、二进制数组、SIMD
第十七阶段Yeoman脚手架
基本安装、配置、HTML模板、图片压缩、构建工具、包管理器、JSLint测试。
第十八阶段Grunt和Gulp构建工具
GIT、SVN、Grunt、Gulp、Webpack。通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理。利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。通过最少的 API,掌握 Gulp 毫不费力,构建工作尽在掌握:如同一系列流管道。
第十九阶段Sass、Less和Stylus
sass中可以定义变量,方便统一修改和维护。用sass进行 选择器的嵌套,表示层级关系。用sass中导入其他sass文件,最后编译为一个css文件t。用sass中可用mixin定义一些代码片段,且可传参数,方便日后根据需求调用
第二十阶段React.js构建视图组件
React简介、JSX、组件的生命周期、实例化、数据流、事件处理、组件的复合、mixin、DOM操作、动画、性能优化、服务端渲染、周边类库。VUE数据模板、生命周期、过滤器。
第二十一阶段VUE界面的前端库
遇见Vue.js、数据绑定、指令、计算属性、表单控件绑定、过滤器、Class与Style绑定、过渡、绑定事件、组件、表单校验、分组校验、与服务端通信、RESTful调用。
第二十二阶段React Native移动框架
React Native简介、React Native开发基础、常用组件介绍及实践、TextInput组件、九宫格实现、NavigatorIOS组件、Touchable类组件、状态机思维与状态机变量、深入理解UI重新渲染的过程、Navigator组件工作机制、混合开发基础、组件生命周期、数据存储及React Native应用实现步骤。
第二十三阶段 Cordova和PhoneGap
使用加速计和位置传感器、文件系统、存储及本地数据库、处理音频、图像和视频、处理通讯录、本地事件、使用XUI、使用jQuery Mobile进行用户界面开发、PhoneGap插件扩展、开发工具及测试。
第二十四阶段ionic framework
Ionic和Hybrid应用介绍、配置开发环境 、Ionic导航和核心组件、选项卡、高级列表和表单组件、开发高级应用、使用 Ionic 命令行代理、在页面中使用 ionScroll、过滤器:转换视图中的数据。
第二十六阶版本管理系统和项目打包测试
第二十七阶段前端攻防、部署和SEO
第二十八阶段WebGL和Three.js
第二十九阶段TypeScript和Angula4

㈣ 前端开发的基本方法

CSS部分

盒子边倾斜

clip-path: polygon(12% 0, 100% 0, 100% 100%, 0 100%);

禁止点击事件/鼠标事件“穿透”

div * { pointer-events: none; /*链接啊,点击事件啊,都没有效果了*/ }

用来控制元素在移动设备上使用滚动回弹效果

.main{
-webkit-overflow-scrolling: touch;
}

可解决在IOS中使用overflow:auto 形成的滚动条,滚动不流畅的情况

文字渐变效果

.text-gradient{ background-image: linear-gradient(135deg, deeppink, deepskyblue);
-webkit-background-clip: text; color: transparent;
}

css三角形

#triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid red;

}

实现圆弧

clip-path: ellipse(80%60% at50%40%);

JS部分

JavaScript中检测数组的方法

(1)、typeof操作符

这种方法对一些常用的类型检查没有问题,但对array和null 都判断为object
(2)、instanceof操作符

这个操作符是检测对象的原型链是否指向构造函数的prototype对象的
(3)、对象的constructor属性

const arr = []

console.log(arr.constructor === Array) // true

(4)、Object.prototype.toString

constarr=[]console.log(Object.prototype.toString.call(arr)==='[objectArray]')//true

(5)、Array.isArray()

常用的字符串操作

  • 字符串转化toString()

  • 字符串分隔split()

  • 字符串替换replace()

  • 获取长度length

  • 查询子字符串 indexOf

  • 返回指定位置的字符串或字符串编码 charAt charCodeAt

  • 字符串匹配 match

  • 字符串拼接concat

  • 字符串的切割或提取slice() substring() substr()

  • 字符串大小写转化 toLowerCase toUpperCase

  • 字符串去空格 trim() 用来删除字符串前后的空格

  • 其中第9中三者的区别如下:
    (1)slice(), 参数可以是负数,负数表示从字符串最后一个位置开始切割到对应结束位置
    (2)substring(),参数不可为负数,切割第一个位置到第二个位置的字符串
    (3)substr(), 参数可以是负数,第一个参数是开始位置,第二个参数为切割的长度
    字符串去重

  • const str = '11122223333'const uniqueStr = [...new Set(str)].join('')

  • 常用的数组操作

    1、Array.map()
    此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组
    2、Array.forEach()
    此方法是将数组中的每个元素执行传进提供的函数,没有返回值,注意和map方法区分
    3、Array.filter()
    此方法是将满足条件的元素作为一个新数组返回
    4、Array.every()
    此方法将数组所有元素进行判断返回一个布尔值,如果所有元素都符合判断条件,则返回true,否则返回false
    5、Array.some()
    此方法将数组所有元素进行判断返回一个布尔值,如果有一个元素满足判断条件,则返回true,所有元素都不满足则返回false
    6、Array.rece()
    此方法为所有元素调用返回函数
    7、Array.push()
    在数组最后面添加新元素
    8、Array.shift()
    删除数组第一个元素
    9、Array.pop()
    删除数组最后一个元素
    10、Array.unshift()
    在数组最前面增加元素
    11、Array.isArray()
    判断是否为一个数组
    12、Array.concat()
    数组拼接
    13、Array.toString()
    数组转化为字符串
    14、Array.join()
    数组转化为字符串,并用第一个参数作为连接符
    15、Array.splice(开始位置,删除个数,元素)
    其中rece使用方法为:

  • arr.rece(callback,[initialValue])


  • 跳过第一个索引。如果提供initialValue,从索引0开始。

  • callback (执行数组中每个值的函数,包含四个参数)
    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素)
    3、index (当前元素在数组中的索引)
    4、array (调用 rece 的数组) initialValue (作为第一次调用 callback 的第一个参数。)
    如果没有提供initialValue,rece 会从索引1的地方开始执行 callback 方法,

    数组去重:

  • const arr = [1, 2, 3, 1, 2, 3]const uniqueArr = [...new Set(arr)]

  • 常用对象方法

    1、Object.assign()
    用于克隆,两个参数,将第二个对象分配到第一个中
    2、Object.is()
    用于判断两个值是否相同
    //注意,该函数与==运算符不同,不会强制转换任何类型, 应该更加类似于===,但值得注意的是它会将+0和-0视作不同值
    3、Object.keys()
    用于返回对象可枚举的属性和方法的名称,返回一个属性或方法名称的字符串数组。
    4、Object.defineProperty()
    劫持变量的set和get方法,将属性添加到对象,或修改现有属性的特性

  • var a = {};Object.defineProperty(a, 'name', { value : 'kong', enumerable : true //该属性是否可枚举})

  • 5、Object.defineProperties()
    可添加多个属性,与Object.defineProperty()对应,
    6、isPrototypeOf

  • function a(){}

  • var b = new a();console.log(a.prototype.isPrototypeOf(b));//true

  • 安卓监听可视区域变化,让输入框移动至可视区域

  • if (/Android/gi.test(navigator.userAgent)) { window.addEventListener('resize', function () { if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') { window.setTimeout(function () { document.activeElement.scrollIntoViewIfNeeded();

  • }, 0);

  • }

  • });

  • };

  • vue中平滑滚动到某个位置

    this.$refs.rule.scrollIntoView({ block: 'start', behavior: 'smooth' })

    向URL追加参数

  • /**

  • * 向URL追加参数

  • * @function stringifyUrlArgs

  • * @param {string} url - URL路径

  • * @param {object} params - 参数对象

  • * @return {string}

  • const stringifyUrlArgs = (url, params) => {

  • url += (/?/).test(url) ? '&' : '?'

  • url += Object.keys(params).map(key => `${key}=${params[key]}`).join('&') return url

  • }

  • 解析URL参数

  • /**

  • * 解析URL参数

  • * @function parseUrlArgs

  • * @param {string} url - 字符串

  • * @return {object}export const parseUrlArgs = url => { const arr = url.match(/([^?=&]+)(=([^&]*))/g) || [] const args = arr.rece((a, v) => {

  • a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1) return a

  • }, {}) return args

  • }

  • 好用的JavaSrcipt库与模块(包)

    日期时间处理库

    1、monent.js
    2、day.js
    day相对于monent要轻量许多

    高精度数学运算

    number-precision

  • NP.strip(num) // strip a number to nearest right numberNP.plus(num1, num2, num3, ...) // addition, num + num2 + num3, two numbers is required at least.NP.minus(num1, num2, num3, ...) // subtraction, num1 - num2 - num3NP.times(num1, num2, num3, ...) // multiplication, num1 * num2 * num3NP.divide(num1, num2, num3, ...) // division, num1 / num2 / num3NP.round(num, ratio) // round a number based on ratio

  • 实用工具库

    Lodash
    lodash 是一个 JavaScript 实用工具库,提供一致性,及模块化、性能和配件等功能。
    Lodash 消除了处理数组的麻烦,从而简化了 JavaScript、 数字、对象、字符串等

㈤ 前端开发threejs库难吗

有些难度,threejs库对于前端工程师来说要求较高。ThingJS是更为上层的抽象,不用关心渲染,mesh,光线等复杂概念。它抽象是一个个具体的模型,ThingJS封装了对模型交互事件的各种api,比如单击,左键,鼠标滑过等,ThingJS封装了对模型的操作,例如移动,放大缩小,上色,勾边,甚至开门,ThingJS还封装了模型的层次关系,例如物体是放在某个房间里的,房间又在某个楼层,楼层又是某个大楼的,大楼在园区里。这样讲是不是更直观呢?所以既然有难度不如使用封装threejs库的thingjs吧网页链接

㈥ web前端开发要怎么学

要学前端就要想了解前端是什么,用官方的定义,就是网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。

用我们的话来说,前端就是网页给访问网站的人看的内容和页面,而前端开发顾名思义就是这些内容的制作,也就是代码的实现。而要实现这些代码,就要用到HTML,CSS及JavaScript三大基础知识。目前看来。论趋势如何发展,它们都是整个前端开发的三大基石。

前端学习起来知识面比较广,知识很杂乱,可能自学起来有一定的困难,缺乏学习方向。如果要报班培训的话,也是一个不错的选择,至少,你能明确自己的学习方向,遇到问题可以及时解决,不过可能要承担昂贵的学费。

总之,无论是自学还是报班,前端的学习都是一个大工程,都需要自己多下功夫的。学无止境,付出全身心的努力,你一定能得到收获。

㈦ web前端需要学什么容易学吗

这里整理了一份web前端学习路线图以及所学内容:

web前端路线图:

第四阶段:移动端和微信实战

阶段目标:

1.熟练掌握React.js框架,熟练使用React.js完成开发。

2.掌握移动端开发原理,理解原生开发和混合开发。

3.熟练使用react-native和Flutter框架完成移动端开发。

4.掌握微信小程序以及了解支付宝小程序的开发。

5.完成大型电商项目开发。

知识点:

1、React面向组件编程、表单数据、组件通信、监听、生命周期、路由、Rex基本概念。练使用react完成项目开发、掌握Rex中的异步解决方案Saga。

2、react-native、开发工具、视图与渲染、api操作、Flutter环境搭建、路由、ListView组件、网络请求、打包。练掌握react-native和Flutter框架,并分别使用react-native和Flutter分别能开发移动端项目。

3、微信小程序基本介绍、开发工具、视图与渲染、api操作、支付宝小程序的入门和api学习。掌握微信小程序开发了解支付宝小程序。

4、大型购物网站实战,整个项目前后端分离开发;整个项目分为四部分:PC端网页、移动端APP、小程序、后台管理。团队协作开发,使用git进行版本控制。目期间可以扩展Three.js 、TypeScript。

㈧ 学习前端有什么书推荐

一、《web前端开发最佳实践》

这本书是前端开发领域的经典之作,是一本扎实前端基本功,规范我们前端代码的实践性书籍。本书主要讲解了HTML、CSS、JavaScript以及移动端开发的最佳实践方案,能对缺乏良好知道的开发者产生很大的帮助。通过阅读本书我们可以掌握如何编写高可读性、高维护性、高性能的HTML、CSS以及JavaScript。

二、《CSS那些事儿》

《CSS那些事儿是2009年电子工业出版社出版的图书,作者是林小志。该书通过对CSS技巧实例进行讲解,深入地分析了CSS相关知识。

通过页面中的文字、图片、表格、表单等常见元素的处理及各种页面布局方式的使用,使读者能深入了解如何在页面中更好地运用CSS布局。尤其是在页面布局的部分中,全面分析了多重布局方式,着重分解了两列等高和三列等高的几种方式,并相应说明了等高布局的优缺点。

三、《CSS权威指南》

内容介绍:《CSS权威指南》通过诸多示例,详细讲解了如何做到仅在一处建立样式表就能创建或修改整个网站的外观,以及如何得到html力不能及的更丰富的表现效果。同时展示了如何遵循css最新规范(css2和css2.1)将层叠样式表的方方面面应用于实践。

七、HTTP权威指南

内容介绍:《HTTP权威指南》由古尔利所着,《HTTP权威指南》详细解释了如何用HTTP来开发基于Web的应用程序,核心的[因特网协议,如何与架构构建块交互,如何正确实现因特网客户和服务器等。

《HTTP权威指南》的中心内容是HTTP,本质是理解Web的工作原理,以及如何将这些知识应用到Web编程和管理之中,主要涵盖HTTP的技术运作方式、产生动机、性能和目标以及一些相关技术问题。 《HTTP权威指南》适合所有想了解HTTP和Web底层结构的人阅读。

八、高性能网站建设指南

内容介绍:《高性能网站建设指南》结合Web2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。

㈨ 你遇到的前端面试题都有什么

大家好,我是王我。

随着春节的结束,各个行业也普遍开始了上班的节奏, 不过本人17号才上班。为什么?因为长得帅的都上班比较晚。 当然,每到新年结束,又迎来了一批招聘者与面试者,我来说说作为一年工作经验应该知道的面试题。

HTML篇

1.doctype是什么?有哪些类型?

2.input有哪些新类型?简要说明其8用法。

3.HTML5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?

4.bootstrap响应式的原理是什么?

5.多移动终端页面适配是如何实现的?

CSS篇

1.如何实现两列布局,左边自适应,右边固定宽度?

2.用CSS画一个三角形

3.CSS实现字体大写

4.display有哪些常用的属性值?分别是什么意思?

5.position为absolute,relative,fixed的定点位置

6.用三种方法清除浮动

7.请介绍一下margin塌陷问题

js篇

1.什么是事件冒泡和捕获?如何阻止事件冒泡?(分别用原生和jquery实现)

2.js创建对象,至少使用三种方法

3.简述一下事件穿透以及解决办法

4.用三种方式判断变量类型是否是数组

5.如何实现对象的拷贝?

6.什么是闭包?闭包的优缺点。

7.简述一下ajax请求的过程。

8.简述一下new一个人构造函数的人过程。

9.为什么会有跨域?是怎么解决跨域问题的?简述一下原理。

10.js原始数据类型有哪些?

11.学一个函数,判断一个变量是否是字符串

12.typeof有哪些结果?

13.剪头函数和普通函数有什么区别?

14.请用三种方法实现数组去重

15.href和src有什么区别?

jquery篇

1.attr()和prop()有什么区别?

2.on和bind有什么区别?js动态添加的dom元素是通过on还是bind?

3.touch和click有什么区别?

4.window.onload和jquery的ready有什么区别?

vue篇

1.简述一下vue的生命周期及其特点

2.vue双向绑定的原理是什么?

3.vue的特点有哪些?和jquery有什么区别?

4.父子组件之间传递数据的方法

5.子组件如何共享数据?

6.一般有什么工具进行数据交互?

7.webpack的原理是什么?

8.简述一下$nextTick的用法

浏览器篇

1.cookie、sessionStorage、localStorage的区别是什么?

2.有用过浏览器缓存吗?简述一下基本的缓存机制

网络篇

1.http和https之间的区别

2.从服务器的安全考虑,是使用get请求还是post请求?

3.URL请求的过程有哪些?

项目经验篇

1.项目中遇到的最大挑战以及解决办法

2.常见的网页优化有哪些?

作为一个面试一年以内工作经验的前端程序员来说,以上的问题能够倒答如流月薪6k应该不成问题啦。这些面试题也是我在很多面试中感觉经常被问到的题目。

希望大家年后找工作能够顺顺利利, 千万不要跟我一样哦,只有帅气就一无所有了。

大家好,我是王我,中国最帅的前端程序员。

前几次都是各种培训公司,各种忽悠就不提了,说说后面4次面试的经历。

第一次是面一个小公司,不过他们好像没有厉害的前端,来面我的是个后端,一来没有问我关于js的知识,直接问我以前做过什么,有没有经验,我本人不会吹牛,简历也没怎么包装,就是自己把自学的知识和做的几个小demo弄在上面,也用github挂在页面上了,不过他根本不点开看,也不问,问我会不会vue,我当时对框架还不了解,他就说他们需要能直接上手开始写的,所以我第一个就直接挂了。

第二次面试是一个国企,这个问了很多问题,都很基础,js数据类型,数组操作,事件,大概就是高程的前面几章看看就差不多都能答到,然后因为他们主要用jq,所以问了很多jq的操作,关于节点的,动画的,我看锋利的jq大概看了3遍,也练过多次,所以我答的很熟。然后问了些布局方面的,bootstrap我了解过,又看过css3,所以这方面也没啥问题,最后在现场做了个题目,主要就是布局然后通过ajax呈现数据。后面听介绍我面试的说面试官比较满意,说我jq很熟,一面就过了。可惜后面电话面试不知怎么回事可能表现的不够自信,虽然没问技术,但是我没啥自信,把没项目经验什么的也不知怎么就一五一十交代了,估计因为这个挂掉了。

第三次没问问题,直接就是一套题开做,我在那做了一个多小时。题目就是按照要求一步一步做一个页面出来,我也搞忘了我当时卡在哪个地方了,坐在那得时候就是做不出来,没有设计图,要根据他的描述自己找个设计图然后做,我第一次遇到这个有点懵,虽然当时没做出来,不过回来我自己花了几个小时把它做了。所以这个也是凉了。

第四个问的比较多,数据类型,数组操作,跨域,ajax,闭包,原型链,继承,深拷贝,浅拷贝,模块amd cmd,基本都是问的js。然后问了html5的新特性 css3 的新特性,遇到过什么浏览器的兼容性问题,怎么解决的,以后想往什么方面发展。这个时候我已经会点vue了,照着做了个小demo,不过后来知道公司用的angularjs,面试官也没看我做的,问也没问。。以前听网上说要带上自己的项目去面试感觉没起多大效果。

最后总结下如果面的比较初级的岗位,应该主要问js,原型链,继承,闭包,深浅拷贝,ajax,跨域,然后js的基础知识,对了还有apply和call也问了,html5的新特性了解下就行。主要就是看你js掌握的程度,如果稍微要求高一点的,暂时还没面过,等以后面过在来回答

1. cookie session 的用途和区别,以及有效期

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

2. vue的数据绑定原理,mvvm与mvc的区别

MVVM:

m:model数据模型层 v:view视图层 vm:ViewModel
vue中采用的是mvvm模式,这是从mvc衍生过来的
MVVM让视图与viewmodel直接的关系特别的紧密,就是为了解决mvc反馈不及时的问题

图片说明一下:


说到MVVM就要说一下双向绑定和数据劫持的原理,

MVC:

m:model数据模型层 v:view视图层 c:controller控制器

原理: c层需要控制model层的数据在view层进行显示

MVC两种方式,图片说明:


总结:

mvvm与mvc最大的区别:
MVVM实现了view与model的自动同步,也就是model属性改变的时候, 我们不需要再自己手动操作dom元素去改变view的显示,而是改变属性后该属性对应的view层会自动改变。

不懂得可以复制链接查看:

https://www.pianshen.com/article/3716256399/

3. storage 的区别 sessionStorage localStorage

localStorage 的生命周期是永久性的。假若使用localStorage存储数据,即使关闭浏览器,也不会让数据消失,除非主动的去删除数据,使用的方法如上所示。localStorage有length属性


sessionStorage 的生命周期是在浏览器关闭前。也就是说,在整个浏览器未关闭前,其数据一直都是存在的。sessionStorage也有length属性,其基本的判断和使用方法和localStorage的使用是一致的


4.v-model双向数据原理

有一个文本框 通过v-bind绑定了value属性 值为myname 是我们在vue实例中定义的属性
传统我们获取文本框值方法 可能通过getElementById找到文本框 然后获取其value属性
但是vue中直接通过v-bind绑定了value属性 所以不需要像之前那样获取值
所以在后面的按钮中获取name值 直接获取vue实例对象data里面的myname属性即可

【数据为尊 ----数据映射到浏览器 如果数据v-model后修改(肯定input)然后到数据在有数据映射到浏览器页面 ----映射关系统称】



5.keepAlive用过吗?什么作用?

缓存路由组件


使用的是vue的一个组件,参考vue的官方文档

使用这个东西可以保证我们在切换组件的时候,原来显示的组件不被销毁

-----【保障组件的数据不会被切换路由而销毁数据】

Home是对应的组件对象的名字,不是路由的名字

6.多维数组拍平

数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组

一红六种方法吧……

了解的请看: https://www.cnblogs.com/guan-shan/p/10165737.html

7.跨域的原因 解决方案

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。

这样就可以说同源策略----协议---端口---域名

原生的src和href可以解决跨域

代理可以解决

请求头也可以携带浏览器提示的也可以解决

一般都是后端解决跨域问题

【别的需要了解看下方链接】

https://blog.csdn.net/qq_41604383/article/details/100770100

8.uniApp兼容问题

§ 如果你使用cli创建项目(即项目根目录是package.json),不管用什么ide,即便是用HBuilderX,切记cli项目的编译器是在项目下的,HBuilderX不管怎么升级都不会影响编译器版本。你需要手动npm update来升级编译器。以及如果你想要安装less、scss等预编译器,也需要自己npm安装在项目下,而不是在HBuilderX的插件管理里安装。

§ 如果你使用离线打包,请注意HBuilderX升级后,真机运行基座和云打包对应引擎跟随HBuilderX升级,而你的sdk需要手动升级。sdk的版本升级一般滞后HBuilderX正式版升级一两天。

§ 如果你使用自定义基座,之前制作的自定义基座是不会跟随HBuilderX升级的,升级HBuilderX后你应该重新制作新版自定义基座。

§ 如果你使用wgt升级,新版HBuilderX编译的wgt,运行到之前的runtime上,一定要先测试好,看有没有兼容性问题。如果有问题,就不要wgt升级,整包升级。

§ 考虑到向下兼容,uni-app编译器在升级为新的自定义组件模式后,同时保留了对老编译模式的向下兼容。
在HBuilderX alpha版中,App端一定会使用新编译器,不理会manifest配置。
在HBuilderX 正式版中,新创建的项目会使用新编译器,老项目不会强制使用,而是开发者自己在manifest里配置开启。

§ 如果你使用其他ide开发uni-app,会经常因为拼错单词而运行失败,因为经过webpack编译一道,很多错误反应的不够直观,排错时间很长,不如从开始就依赖有良好提示的HBuilderX,避免敲错单词。

§ 云打包的引擎版本说明
HBuilderX Alpha,只有1套云打包机,不管你的HBuilderX alpha版本多少,对应的打包机一定是最新的alpha版的客户端引擎。
HBuilderX正式版,有2套打包机,一个是最新正式版,一个是次新正式版。
中间的紧急更新版本没有独立打包机。
举个例子:
HBuilderX 有1.8.0、1.8.1、1.8.2、1.9.0、1.9.1这几个正式版。
那么当前可用的打包机有1.9.1和1.8.2这2台。(即每个大版本的最后一个版本)
除了这2个HBuilderX版本外,其他版本的云打包都指向最新的1.9.1版对应的打包机。(即只保留2个大版本的云打包机)

【详情请看】

https://ask.dcloud.net.cn/article/35845

一、HTML

HTML书写规范

H5新增标签

HTML渲染过程

二、CSS

css盒子模型概念

css弹性布局概念

三、JavaScript

事件模型

DOM2级事件模型

闭包

原型链

四、移动Web开发

常见的布局方案

移动端前端常见的触摸相关事件touch、tap、swipe等整理

移动端前端手势事件

移动端页面渲染优化

GPU渲染

GPU核心渲染过程

五、调试

常用的调试工具

Chrome控制台调试js使用

移动端测试

六、HTTP网络知识

常见的HTTP状态码

不同请求类型的区别

WEB缓存方案

——————————

牛客网(www.nowcoder.com)

- 专业IT笔试面试备考平台

- 最全C++JAVA前端等互联网技术求职题库

- 全面提升IT编程能力

- 程序员交友圣地

分享了一些Web前端的面试题,限时一小时,你看看自己能够答出多少道!

放心,这些面试题都是一些非常基础的知识,只要你在平时认真听课、学习了,那么这些面试题肯定不会难道你。

建议:虽然没有人监督你,但还是希望你不要去寻找答案,脱离网络,拿起纸笔,你试一下自己究竟能够答出个什么水平!有没有真本领?答案尽在这些面试题里!那么,你准备好了吗?OK!计时开始!

一、HTML常见题目

01、Doctype作用?严格模式与混杂模式如何区分?它们有何意义?

02、HTML5为什么只需要写?

03、行内元素有哪些?块级元素有哪些?空(void)元素有那些?

04、页面导入样式时,使用link和@import有什么区别?

05、介绍一下你对浏览器内核的理解?

06、常见的浏览器内核有哪些?

07、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?

08、如何区分HTML和HTML5?

09、简述一下你对HTML语义化的理解?

10、HTML5的离线储存怎么使用,工作原理能不能解释一下?

二、CSS类的题目

01、介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

02、CSS选择符有哪些?哪些属性可以继承?

03、CSS优先级算法如何计算?

04、CSS3新增伪类有那些?

05、如何居中p?如何居中一个浮动元素?如何让绝对定位的p居中?

06、display有哪些值?说明他们的作用。

07、position的值relative和absolute定位原点是?

08、CSS3有哪些新特性?

09、请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

10、用纯CSS创建一个三角形的原理是什么?

三、Java类的题目

01、介绍Java的基本数据类型。

02、说说写Java的基本规范?

03、Java原型,原型链?有什么特点?

04、Java有几种类型的值?(堆:原始数据类型和栈:引用数据类型),你能画一下他们的内存图吗?

05、Java如何实现继承?

06、Java创建对象的几种方式?

07、Java作用链域?

08、谈谈This对象的理解。

09、eval是做什么的?

10、什么是window对象?什么是document对象?

OK,一小时到了,这个时间可不算短了,那么这些面试题你答出了几道呢?你写的答案正确了吗?现在你可以去翻看答案了。

如果你答出了绝大多数的或者是全部的题,并且答案也正确了,那么恭喜你……

你这时心里是不是有点小窃喜,认为自己有能力拿高薪了?虽然我也很想这么告诉你,但事实上这只能表明你的基础扎实,毕竟这只是一些非常基础的面试题。骚年~继续努力吧!

如果你只答出了小部分或者答出了大部分题但答案不正确,那么我只想说:“骚年,你的水平还差的远呢。”连这么基础的题你都打不出来,还想拿高薪?回去再练一段时间吧!

扎实的基础是你拿高薪的重要武器,如果你连基础都不扎实,那么想要攻克“高薪”这个厚实的堡垒,那只是痴人说梦罢了。

1.前端框架类问题,问你会不会用vue react啊

2.语言类,问你一些JavaScript语言的问题

3.项目经验,让你讲讲做过的项目,遇到的问题和解决之道

㈩ DOM事件机制

前言

一、DOM事件级别

DOM级别一共可以分为四个级别:DOM0级、DOM1级、DOM2级和DOM3级。而DOM事件分为3个级别:DOM 0级事件处理,DOM 2级事件处理和DOM 3级事件处理。由于DOM 1级中没有事件的相关内容,所以没有DOM 1级事件。

1.DOM 0级事件

el.onclick=function(){}

当希望为同一个元素/标签绑定多个同类型事件的时候(如给上面的这个btn元素绑定3个点击事件),是不被允许的。DOM0事件绑定,给元素的事件行为绑定方法,这些方法都是在当前元素事件行为的冒泡阶段(或者目标阶段)执行的。

2.DOM 2级事件

el.addEventListener(event-name, callback, useCapture)

event-name: 事件名称,可以是标准的DOM事件

callback: 回调函数,当事件触发时,函数会被注入一个参数为当前的事件对象 event

useCapture: 默认是false,代表事件句柄在冒泡阶段执行

IE9以下的IE浏览器不支持 addEventListener()和removeEventListener(),使用 attachEvent()与detachEvent() 代替,因为IE9以下是不支持事件捕获的,所以也没有第三个参数,第一个事件名称前要加on。

3.DOM 3级事件

在DOM 2级事件的基础上添加了更多的事件类型。

UI事件,当用户与页面上的元素交互时触发,如:load、scroll

焦点事件,当元素获得或失去焦点时触发,如:blur、focus

鼠标事件,当用户通过鼠标在页面执行操作时触发如:dblclick、mouseup

滚轮事件,当使用鼠标滚轮或类似设备时触发,如:mousewheel

文本事件,当在文档中输入文本时触发,如:textInput

键盘事件,当用户通过键盘在页面上执行操作时触发,如:keydown、keypress

合成事件,当为IME(输入法编辑器)输入字符时触发,如:compositionstart

变动事件,当底层DOM结构发生变化时触发,如:DOMsubtreeModified

同时DOM3级事件也允许使用者自定义一些事件。

二、DOM事件模型和事件流

DOM事件模型分为捕获和冒泡。一个事件发生后,会在子元素和父元素之间传播(propagation)。这种传播分成三个阶段。

(1)捕获阶段:事件从window对象自上而下向目标节点传播的阶段;

(2)目标阶段:真正的目标节点正在处理事件的阶段;

(3)冒泡阶段:事件从目标节点自下而上向window对象传播的阶段。

DOM事件捕获的具体流程

捕获是从上到下,事件先从window对象,然后再到document(对象),然后是html标签(通过document.documentElement获取html标签),然后是body标签(通过document.body获取body标签),然后按照普通的html结构一层一层往下传,最后到达目标元素。

而事件冒泡的流程刚好是事件捕获的逆过程。

接下来我们看个事件冒泡的例子:

正如我们上面提到的onclick给元素的事件行为绑定方法都是在当前元素事件行为的冒泡阶段(或者目标阶段)执行的。

三、事件代理(事件委托)

由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理(delegation)。

1.优点

减少内存消耗,提高性能

假设有一个列表,列表之中有大量的列表项,我们需要在点击每个列表项的时候响应一个事件

如果给每个列表项一一都绑定一个函数,那对于内存消耗是非常大的,效率上需要消耗很多性能。借助事件代理,我们只需要给父容器ul绑定方法即可,这样不管点击的是哪一个后代元素,都会根据冒泡传播的传递机制,把容器的click行为触发,然后把对应的方法执行,根据事件源,我们可以知道点击的是谁,从而完成不同的事。

动态绑定事件

在很多时候,我们需要通过用户操作动态的增删列表项元素,如果一开始给每个子元素绑定事件,那么在列表发生变化时,就需要重新给新增的元素绑定事件,给即将删去的元素解绑事件,如果用事件代理就会省去很多这样麻烦。

2.如何实现

接下来我们来实现上例中父层元素 #list 下的 li 元素的事件委托到它的父层元素上:

四、Event对象常见的应用

event. preventDefault()

如果调用这个方法,默认事件行为将不再触发。什么是默认事件呢?例如表单一点击提交按钮(submit)跳转页面、a标签默认页面跳转或是锚点定位等。

很多时候我们使用a标签仅仅是想当做一个普通的按钮,点击实现一个功能,不想页面跳转,也不想锚点定位。

也可以通过JS方法来阻止,给其click事件绑定方法,当我们点击A标签的时候,先触发click事件,其次才会执行自己的默认行为

接下来我们看个例子:输入框最多只能输入六个字符,如何实现?

event.stopPropagation() & event.stopImmediatePropagation()

event.stopPropagation() 方法阻止事件冒泡到父元素,阻止任何父事件处理程序被执行。上面提到事件冒泡阶段是指事件从目标节点自下而上向window对象传播的阶段。

我们在例4的inner元素click事件上,添加event.stopPropagation()这句话后,就阻止了父事件的执行,最后只打印了'inner'。

stopImmediatePropagation 既能阻止事件向父元素冒泡,也能阻止元素同事件类型的其它监听器被触发。而 stopPropagation 只能实现前者的效果。我们来看个例子:

如上所示,使用 stopImmediatePropagation后,点击按钮时,不仅body绑定事件不会触发,与此同时按钮的另一个点击事件也不触发。

event.target & event.currentTarget

老实说这两者的区别,并不好用文字描述,我们先来看个例子:

当我们点击最里层的元素d的时候,会依次输出:

从输出中我们可以看到,event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素,只有被点击的那个目标元素的event.target才会等于event.currentTarget。也就是说,event.currentTarget始终是监听事件者,而event.target是事件的真正发出者。

五、参考文章

DOM级别与DOM事件

DOM事件机制解惑

事件模型

JavaScript 事件委托详解

JavaScript 事件的学与记:stopPropagation 和 stopImmediatePropagation

event.target和event.currentTarget的区别

原文: https://github.com/ljianshu/Blog/issues/44

最后:“相信有很多想学前端的小伙伴,今年年初我花了一个月整理了一份最适合2018年学习的web前端干货,从最基础的HTML+CSS+JS到移动端HTML5等都有整理,送给每一位前端小伙伴,53763,1707这里是小白聚集地,欢迎初学和进阶中的小伙伴。”

祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。