我已经搜索了一段时间,我似乎无法找到我需要的东西。 我知道你可以自定义缓和,但我不知道怎么做。 我正在进行赛马比赛(JQuery移动了所有马匹)。我需要它们以随机的速度运行,但需要在给定的持续时间内完成动画。例如:
Horse1:
[0-1-3-4-5-4-4-5-3-2-8-9-8-4-3-2-1-0]
Horse2:
[4-4-2-1-1-1-4-9-9-9-8-6-5-4-3-2-5-6]
Horse3:
[2-3-4-5-5-5-5-6-7-8-7-4-5-1-2-4-5-8]
此处的数字代表元素的速度(速度)。我已经看过一个特殊的插件用于缓和,但没有像我想要的那样宽松。
感谢任何帮助。 谢谢, Nedas
答案 0 :(得分:2)
我在下面提供了一个示例,展示了如何使用jQuery的animate
函数来实现"竞赛"三匹马"使用您提供的数据。但是,这是使用标准"线性" jQuery提供的缓动函数,每个" horse"多次调用animate
函数。
从技术上讲,你可以创建自定义缓动函数来移动马匹,将速度数据合并到缓动函数中。但是,我不认为这是解决问题的好方法,原因如下:
在任何情况下,如果您想了解有关创建自定义缓动功能的一些信息,请查看this other Stack Overflow answer。
var horseSpeeds = [
[0, 1, 3, 4, 5, 4, 4, 5, 3, 2, 8, 9, 8, 4, 3, 2, 1, 0],
[4, 4, 2, 1, 1, 1, 4, 9, 9, 9, 8, 6, 5, 4, 3, 2, 5, 6],
[2, 3, 4, 5, 5, 5, 5, 6, 7, 8, 7, 4, 5, 1, 2, 4, 5, 8]
];
var $horses = $("div");
var raceStepNum = 0;
var dist = [0, 0, 0];
var moveHorses = function moveHorses() {
$horses.each(function(horseNum, horse) {
dist[horseNum] += (horseSpeeds[horseNum][raceStepNum]) * 4;
$(horse).animate({
marginLeft: dist[horseNum]
}, 100, "linear", function() {
if (horseNum === 0) {
raceStepNum += 1;
if (raceStepNum < horseSpeeds[0].length) {
moveHorses();
}
}
});
});
}
$("button#startRace").click(moveHorses);
$("button#resetRace").click(function() {
$("div").css({marginLeft: 0});
dist = [0, 0, 0];
raceStepNum = 0;
});
&#13;
div {
width: 20px;
height: 20px;
margin-bottom: 10px;
}
#horse0 {
background-color: blue;
}
#horse1 {
background-color: red;
}
#horse2 {
background-color: green;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="startRace">Start race</button><button id="resetRace">Reset race</button>
<div id="horse0"></div>
<div id="horse1"></div>
<div id="horse2"></div>
&#13;