变形园

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
div{
width:150px;
height: 150px;
border-radius: 50%;
background:linear-gradient( red 50%,green 50%);
}
</style>
</head>
<body>


<div id="app"></div>


    <script type="text/javascript">

//声明一个变形类
class Transform{

    constructor(selector){
//获取选择器
this._el=document.querySelector(selector);
this.defaultTime=Transform.config.defaultTime;
//设置是否所有的属性都可以发生渐变
this._el.style.transition=`all ${this.defaultTime}`;
//设置默认时间

//用于存放变形的方法
this.queue=[];
//用于存放每一个变形的属性
this.transform={
translate:'',
scale:'',
rotate:''
};
    }


//平移方法

translate(value,time){
this._add("translate",value,time);
return this;

}


//旋转方法
rotate(value,time){

    this._add("rotate",value,time);
return this;
}

//扭曲
scale(value,time){
    this._add("scale",value,time);
    return this;
}

//添加

_add(type,value,time){

this.queue.push({type,value,time});
return this;

}

//所有组装完之后进行开始
done(){
    this._start();
}


//将变形方法一个一个取出来
_start(){
setTimeout(()=>{

//判断接受方法
if(!this.queue.length) return;

const info=this.queue.shift();
this._el.style.transition=`all ${info.time}/1000`;
console.log(this._getTransform(info))
this._el.style.transform=this._getTransform(info);
    setTimeout(() => {
                this._start();
            }, info.time);

},0);

}

//获取属性
_getTransform({type,value,time}){
    //用于存放样式
    const tf=this.transform;
switch(type){
case "translate":
tf.translate=`translate(${value})`;
break;
case "scale":
tf.scale=`scale(${value})`;
break;
case "rotate":
tf.rotate=`rotate(${value}deg)`
break;

}
return `${tf.translate} ${tf.scale} ${tf.rotate}`;
}


}


//设置一个默认时间
Transform.config={
    defaultTime:''
}
Transform.config.defaultTime="3s";


//
class MutilTransform extends Transform{


    multi(value, time) {
        return this._add('multi', value, time);
    }


sleep(time){
    return this._add("sleep","",time);
}


_getTransform({type,value,time}){
    //用于存放样式
    const tf=this.transform;
switch(type){
case "translate":
tf.translate=`translate(${value})`;
break;
case "scale":
tf.scale=`scale(${value})`;
break;
case "rotate":
tf.rotate=`rotate(${value}deg)`
break;
case 'multi':  //这里可以散开传进来
 value.forEach(item=>{
     this._getTransform(item);
 });
 break;
 case 'sleep':
 break
}
return `${tf.translate} ${tf.scale} ${tf.rotate}`;
}


}
const tf = new MutilTransform('#app');
tf
    .translate('200px, 200px')
    .scale(1.5)
    .sleep(1000)
    .rotate(180, 5000)
    .multi([
        {
            type: 'translate',
            value: '0, 0'
        },
        {
            type: 'scale',
            value: 2
        }
    ])
.done()


    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值