适用于多个活动场景
1.HTML
<body>
<div class="old-driver">
<div class="box-false">
<div class="box">
<img class="car" src="car.png">
<img class="gas" src="gas.png">
</div>
</div>
</div>
</body>
2.CSS
<style type="text/css" media="screen">
.old-driver {
width: 100%;
height: 350px;
position: relative;
overflow: hidden;
}
@keyframes an-shake {
0%, 100% {
transform: translate(1px, 0px) rotate(0deg)
}
20% {
transform: translate(-2px, -2px) rotate(0.2deg)
}
40% {
transform: translate(-2px, 1px) rotate(-0.1deg)
}
60% {
transform: translate(-1px, 2px) rotate(-0.2deg)
}
80% {
transform: translate(0px, 2px) rotate(0.1deg)
}
}
.box-false {
position: absolute;
bottom: 50px;
right: -300px;
width: 300px;
height: 200px;
}
.an-shake {
animation: an-shake .1s infinite ease-in-out;
}
.box {
position: relative;
width: 100%;
height: 100%;
}
.box img.car {
position: absolute;
width: 375px;
left: 0;
bottom: 0;
}
@keyframes an-gas {
0% {
transform: translate(-25px, 15px) scale(0)
}
100% {
transform: translate(5px, 0px) scale(.8)
}
}
.box img.gas {
position: absolute;
width: 80px;
right: -65px;
bottom: 4px;
}
.box img.an-gas {
animation: an-gas .2s infinite ease-in-out;
}
@keyframes an-brake {
10%, 60% {
transform: skewX(15deg);
}
0%, 100% {
transform: skewX(0deg);
}
}
.an-brake {
transform-origin: 50% 100%;
animation: an-brake .5s ease-in-out;
}
</style>
3.Javascript
<script src="jquery.js" charset="utf-8"></script>
<script type="text/javascript">
var Car = function (car, direction, cls) {
this.target = car;
this.direction = direction || ‘right‘;
cls = cls || {};
this.boxEntity = this.target.find(‘.‘ + (cls.box || ‘box‘));
this.carEntity = this.boxEntity.find(‘.‘ + (cls.car || ‘car‘));
this.gasEntity = this.boxEntity.find(‘.‘ + (cls.gas || ‘gas‘));
this.anIgnition = cls.anIgnition || ‘an-shake‘;
this.anGas = cls.anGas || ‘an-gas‘;
this.anBrake = cls.anBrake || ‘an-brake‘;
var that = this;
// 点火
this.ignition = function (time) {
//生成一个deferred延时对象
var deferred = new $.Deferred();
this.target.addClass(this.anIgnition);
this.gasEntity.addClass(this.anGas);
setTimeout(function () {
that.target.removeClass(that.anIgnition);
that.gasEntity.removeClass(that.anGas);
//改变deferred对象的状态。resolve()将状态改为非同步操作成功
deferred.resolve();
}, time);
//promise是deferred的只读版
return deferred.promise();
};
// 移动
this.move = function (distance, time) {
var deferred = new $.Deferred();
time = time || 2000;
var css = {};
css[this.direction] = distance;
this.target.animate(css, time, ‘linear‘, function() {
deferred.resolve();
});
return deferred.promise();
};
// 加速
this.speedUp = function (distance, begin, end, framesPx) {
var deferred = new $.Deferred();
var frames = 200;
framesTime = 10000 / frames;
var now = parseInt(this.target.css(this.direction));
if (now >= parseInt(distance)) {
deferred.resolve();
} else {
framesPx = framesPx || ((distance - now) / frames);
begin = framesPx + begin;
if (begin >= end) {
begin = end;
}
var css = {};
css[this.direction] = now + begin;
this.move(now + begin, framesTime).then(function () {
return that.speedUp(distance, begin, end, framesPx);
}).then(function () {
deferred.resolve();
});
}
return deferred.promise();
};
// 刹车
this.brake = function (distance, time) {
var deferred = new $.Deferred();
this.boxEntity.addClass(this.anBrake);
this.move(distance, time).then(function() {
setTimeout(function () {
that.boxEntity.removeClass(that.anBrake);
deferred.resolve();
}, 500);
});
return deferred.promise();
};
// 停车事宜
this.stop = function (time) {
var deferred = new $.Deferred();
setTimeout(function() {
deferred.resolve();
}, time);
return deferred.promise();
};
// 睡眠
this.sleep = function (time) {
var start = new Date();
while(new Date() - start < time) {}
};
};
$(function() {
var car = new Car($(‘.box-false‘));
car.move(-100, 200).then(function() {
return car.brake(50, 200);
}).then(function () {
console.log(‘车将停留 3 秒...‘);
console.log(‘请游客下车‘);
return car.stop(1000);
}).then(function() {
console.log(‘点火‘);
return car.ignition(500);
}).then(function () {
console.log(‘车已启动‘);
return car.speedUp(1500, 0, 300);
}).then(function() {
console.log(‘车已经离开...‘);
});
});
</script>
注:car.move里面的参数可以自行设置,如果是需要移动端请联系我,目前上传的是PC端
4.IMAGE 所用到的图片
car.png
gas.png