ECMAScript6轮播图实践知识总结


Posted in Javascript onAugust 17, 2016

模板字符串

这是我非常喜欢的ES6的特点之一,非常直观的反应出变量和字符串之间的关系,在ES5中,如果我们想在字符串中添加变量,需要用如下写法:

animate(box, 'translate(-' + itemWidth * num + 'px,0)', 1000, function () {
  box.style.transitionDuration = '';
  box.style.transform = 'translate(-800px,0)';
  flag = true;
});

现在用ES6的模板字符串,可以直接把字符串和变量相结合,更加易懂。

animate(box, `translate(-${itemWidth*num}px,0)`, 1000, function() {
  box.style.transitionDuration = '';
  box.style.transform = `translate(-${itemWidth*(item.length-2)}px,0)`;
  flag = true;
});

是不是非常直观方便,从上面的两个简单示例中可以看出,在ES6中,字符串用反引号(``)标识,这一点需要知道。

还有一个特点,模板字符串可以输出折行的字符串,这在ES5传统字符串中是无法做到的,必须借助(\n),且不能在书写时候写入回车,但是在ES6的字符串模板中,可以直接写入回车,空格,然后在字符串输出时候直接输出,非常方便。

let myString=`abc
de
ffff 
fas`;
console.log(myString);
/*输出abc
de
ffff 
fas*/

对函数的扩展

1.给函数设置默认值

在对函数的扩展中,添加了一项给函数设置默认值的功能,这个功能可以说是非常赞的。是否记得我们在ES5中是怎么给函数设置默认值?

function test(a,b,c){
  var a=a||10;
  var a=b||15;
  var c=c||20;
  console.log(a+b+c);
}

这里我们设置默认值,可以达到自己的预期效果,直到有一天,我们把a=0传入,这时候,我们这么写就不对了,对于程序来说,0就是false,所以a会取默认值10,从而达不到我们预期的效果。但是ES6为我们提供非常好的设置默认值的方式。上面的代码可以改写成下面的这样:

function test(a=10,b=15,c=20){
  console.log(a+b+c);
}

2.箭头函数

了解Coffescript的同学应该清楚,Cofficescript的强大之处在于它的无处不在的箭头函数,写起来非常爽,现在,ES6正式引入箭头函数,让我们的程序可以得到简化,例如:

//ES5的写法
var test = function (a,b){
  return a+b;
}
//ES6的箭头函数
var test2 = test(a,b)=>a+b;

在写轮播时候,需要鼠标移动到下面的这个小圆点在小圆点类数组对象中是第几个,从而才能让图运动到正确位置,在ES5的时候,我们需要给当前这个对象添加属性,写起来比较繁琐,写法如下:

var liList = document.querySelectorAll('li');
for(var i=0;i<liList.length;i++){
  liList[i].index=i;
  liList[i].addEventListener('mouseenter',function(){
    console.log(this.index);
  },false);
}

这个this.index属性就是当前的鼠标放上去的元素的索引,然后根据这个索引去得到当前的元素。但是在ES6中,我们可以直接使用箭头函数以及在数组中新引入的findIndex来找到当前的活动元素的索引,代码如下:

let liList = document.querySelectorAll('li');
let ArrayliList=Array.form(liList);
for(var i=0;i<liList.length;i++){
  liList[i].index=i;
  liList[i].addEventListener('mouseenter',function(){
    let thisIndex = ArrayliList.findIndex((n) => n == this);
  },false);
}

以上代码得到的thisIndex就是当前鼠标放上去的索引,这里我对箭头函数中n这个参数的理解是,传入参数n后会遍历数组中的对象,从而找到与this相等的那个对象,然后返回它的索引,这里用到Array.from(),这是一个ES6中数组中新增的方法,可以将类数组转换成数组。

ES6的for…of循环

上面的JS代码循环用了for,其实可以用ES6中的for…of循环去代替,这样写法更加简洁。是否记得JS中的for…in循环,这个循环可以循环键值对中的键,但是无法循环值,而for…of的出现正是为了弥补它的不足,for…of循环可以使用的范围包括数组、Set和Map结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、Generator对象,以及字符串。所以我们可以利用该循环替代for循环,但是这里要注意一点如果直接用for…of循环,在chrome49下会报错,官方已证实这是chrome49的BUG,将会在chrome51中修复,所以我在写的时候,利用Array.from()将NodeList对象转换为数组,这样可以放心操作,代码如下:

let liList = document.querySelectorAll('li');
let ArrayliList=Array.form(liList);
for(let li of liList){
  li.addEventListener('mouseenter',function(){
    let thisIndex = ArrayliList.findIndex((n) => n == this);
  },false);
}

总结

以上就是本文的全部内容,是不是非常简洁,通过这篇文章感觉仅仅只是这些就已经让我感受到ES6的魅力了,希望对大家学习ES6能有所帮助。

Javascript 相关文章推荐
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
Mar 01 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
vue获取时间戳转换为日期格式代码实例
Apr 17 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
jQuery 全选 全部选 反选 实现代码
Aug 17 #Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 #Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 #Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 #Javascript
深入理解jQuery layui分页控件的使用
Aug 17 #Javascript
AngularJS 作用域详解及示例代码
Aug 17 #Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 #Javascript
You might like
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Python画图学习入门教程
2016/07/01 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python如何生成树形图案
2018/01/03 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python 修改本地网络配置的方法
2019/08/14 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
致跳远、跳高运动员广播稿
2014/01/09 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
党支部公开承诺书
2014/03/28 职场文书
市场调查策划方案
2014/06/10 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python
Python实现双向链表
2022/05/25 Python