ES6 DEMO
案例:
①匿名封装
(function(window,document){
const HEAD = 1;
let MSG = function(options){
this._init(options);
}
//原型
MSG.prototype._init = function({msg}){
this._doSomeThing(msg);
}
MSG.prototype._doSomeThing = function(msg){
alert(msg);
}
// 挂载
window.$Msg = Msg;
})(window,document);
// 调用
new $Msg({msg : '您好'}); ②PromiseAll运用,图片全部加载才显示出来 (function(document) {
let LoadImg = function(){
let promises = imgs.map(src => {
return this.imgToPromise(src);
}); this.imgLoad(promises);
}
LoadImg.prototype.imgToPromise = src => {
return new Promise((resolve,reject) => {
const img = new Image();
img.src = src;
img.onload = () => {
你resolve(img);
};
img.onerror = (e) => {
reject(e);
}
})
}
LoadImg.prototype.imgLoad = arr => {
Promise.all(arr).then((arr)=>{
arr.forEach(img => {
document.body.append(img);
})
},err => {
// 错误
console.log(err);
})
}
window.LoadImg = LoadImg;
})(document); const imgs = [
'https://pics1.baidu.com/feed/5882b2b7d0a20cf4f2291433b2004030adaf99b5.jpeg?token=00786888f8e87b7704e637824f570ece&s=BB98C8015A64750DC42015C00300A0B2','https://pics7.baidu.com/feed/4610b912c8fcc3ce8b524ed0574cdd8ed53f2056.jpeg?token=024ed25c842ae64030effe79f8832ee7&s=E9271F70592B412C18783DD30300C0B2','https://pics7.baidu.com/feed/4610b912c8fcc3ce8b524ed0574cdd8ed53f2056.jpeg?token=024ed25c842ae64030effe79f8832ee7&s=E9271F70592B412C18783DD30300C0B2'
];
new LoadImg(imgs);
③ promise动画
function moveTo(el,x,y){
return new Promise( resolve => {
el.style.transform = `translate(${x}px,${y}px)`;
setTimeout(function(){
resolve();
},1000)
}) }
let el = document.querySelector('div'); document.querySelector('button').addEventListener('click', e => {
moveTo(el,100,100).then(()=>{
console.log(1);
return moveTo(el,200,200);
}).then(()=>{
console.log(1);
return moveTo(el,100,100);
}).then(()=>{
console.log(1);
return moveTo(el,0,0);
})
}) ④对象封装变形类
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<style type="text/css">
.ball{
width: 150px;
height: 150px;
background: linear-gradient(#ff9b9b 50%,#106dbb 50%);
border-radius: 50%;
}
</style>
<body>
<div class="ball"></div>
</body> <script type="text/javascript">
class Transform{
constructor(el){
this.el = document.querySelector(el);
// 队列
this._queue = [];
// 默认时间
this.default_transition = 3000;
this._transform = {
rotate: '',
translate: '',
scale: '',
}
} // 位移
translate(value, time){
return this._add('translate', value, time);
}
// 缩放
scale(value, time){
return this._add('scale',value,time);
}
// 形变
rotate(value,time){
return this._add('rotate',value,time);
} _add(type, value, time){
this._queue.push({type, value, time});
return this;
}
done() {
this._start();
}
_start() {
if(!this._queue.length)return; // 先进先出
setTimeout(() => {
// shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
const info = this._queue.shift();
let transition = info.time ? info.time : this.default_transition; this.el.style.transition = `all ${ transition / 1000}s`; this.el.style.transform = this._getTransform(info);
setTimeout(() => {
this._start();
},transition);
},0)
}
_getTransform({ time, value, type}){
switch(type){
case 'translate':
this._transform.translate = `translate(${ value })`;
break;
case 'scale':
this._transform.scale = `scale(${ value })`;
break;
case 'rotate':
this._transform.rotate = `rotate(${ value }deg)`;
break;
}
return `${this._transform.translate} ${this._transform.scale} ${this._transform.rotate}`;
}
} let tf = new Transform(".ball");
tf.translate('100px,100px').scale('1.5').rotate(2220,220000).done();
</script>
</html>
ES6 DEMO的更多相关文章
- JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)
本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...
- vue+node+es6+webpack创建简单vue的demo
闲聊: 小颖之前一直说是写一篇用vue做的简单demo的文章,然而小颖总是给自己找借口,说没时间,这一没时间一下就推到现在了,今天抽时间把这个简单的demo整理下,给大家分享出来,希望对大家也有所帮助 ...
- JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...
- JavaScript面向对象轻松入门之继承(demo by ES5、ES6)
继承是面向对象很重要的一个概念,分为接口继承和实现继承,接口继承即为继承某个对象的方法,实现继承即为继承某个对象的属性.JavvaScript通过原型链来实现接口继承.call()或apply()来实 ...
- JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)
多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- 一个webpack,react,less,es6的DEMO
1.package.json如下 { "name": "demo", "version": "1.0.0", " ...
- JavaScript面向对象轻松入门之抽象(demo by ES5、ES6、TypeScript)
抽象的概念 狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象. 这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这 ...
- JavaScript ES6和ES5闭包的小demo
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 可能有些小伙伴不知道ES6的写法,这儿先填写一个小例子 let conn ...
随机推荐
- Spring基础(一)_控制反转(IOC)
Spring-IOC 1.简述 1.1 依赖注入DI 现实开发中,每一个应用都会由两个或多个类组成,这些类之间相互协作完成特定的业务逻辑.根据传统做法,每个对象负责管理与自己协作的对象的引用(也就是, ...
- [terminal]关于进度条的学习
在PowerShell中隐藏光标 在pip的源码C:\Python36\Lib\site-packages\pip\utils\ui.py中发现了: @contextlib.contextmanage ...
- 机器学习总结-bias–variance tradeoff
bias–variance tradeoff 通过机器学习,我们可以从历史数据学到一个\(f\),使得对新的数据\(x\),可以利用学到的\(f\)得到输出值\(f(x)\).设我们不知道的真实的\( ...
- XXE漏洞复现步骤
XXE漏洞复现步骤 0X00XXE注入定义 XXE注入,即XML External Entity,XML外部实体注入.通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远 ...
- 安装MinGW出现 mingw-get: *** ERROR *** Get package:
个人的解决方法: 1.手机开个热点让电脑连上. 2.在Setting里面讲proxy关闭.
- 【TensorFlow】TensorFlow获取Variable值,将Variable保存为list数据
Variable类型对象不能直接输出,因为当前对象只是一个定义. 获取Variable中的浮点数需要从数据流图获取: initial = tf.truncated_normal([3,3], stdd ...
- Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)
957. N 天后的牢房 思路: 模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即 ...
- qt creator源码全方面分析(2-10-1)
目录 Getting and Building Qt Creator 获取Qt 获取和构建Qt Creator Getting and Building Qt Creator 待办事项:应该对此进行扩 ...
- Serverless + Egg.js 后台管理系统实战
本文将介绍如何基于 Egg.js 和 Serverless 实现一个后台管理系统 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个 ...
- Blazui 常见问题:我更新了数据,为什么界面没刷新?
首发于:http://www.blazor.group:8000/topic/reply?tpid=9 开门见山,不介绍,不废话 建议食用本文前先食用 https://www.cnblogs.com/ ...