Я работаю над эффектом на http://classicorthodoxbible.com/new.html, где символы в главном описании, завернутые в их собственный диапазон, перемещаются из их обычного места отдыха в случайное местоположение, а затем приближаются к экспоненциальному распаду, к месту назначения. JavaScript встроен в страницу.Почему этот экспоненциальный затухание расстояния приводит к одному из 99 [точных] ошибок?
Консоль JavaScript показывает отладочный: много одинаковых авторизованы линий:
starting_x: 833 starting_y: 275,875 TARGET_x: 833 target_y: 176,875 new.html: 74
последующего представления максимальной глубины стеки вызовов. Так или иначе, код делает то, что предполагается экспоненциальным распадом, застревает с точной разницей в 99 и становится бесконечной рекурсией (распад - по объявлению fiat, когда расстояние уменьшается до двух пикселей между x и y).
Целевое поведение:
продукты размеченного вывода, который имеет каждый вынесенный характер вывода (то есть не метка) в своем собственном SPAN.
Переместите символы каждый в свое местоположение.
Двигайте их линейно в исходное и конечное место отдыха, так что расстояние между текущим местоположением и местом назначения будет экспоненциально убывать.
Функция, которая обрабатывает все перемещения точек (и имеющий бесконечную рекурсию) ниже:
function journey(index, starting_x, starting_y, target_x,
target_y, starting_opacity, target_opacity, delay, radix)
{
if (1 || isNaN(starting_x) || isNaN(starting_y) || isNaN(target_x) || isNaN(target_y))
{
console.log('starting_x: ' + starting_x +
' starting_y: ' + starting_y + ' target_x: ' +
target_x + ' target_y: ' + target_y);
// return;
}
/* console.log(target_x - starting_x + ', ' + (target_y -
starting_y)); */
if (Math.abs(starting_x - target_x) + Math.abs(starting_y -
target_y) < 2)
{
jQuery('#text_' + index).css({'left': target_x, 'top':
target_y, 'opacity': target_opacity, '-ms-filter':
'progid:DXImageTransform.Microsoft.Alpha(Opacity=' +
target_opacity * 100, 'filter': 'alpha(opacity=' +
target_opacity * 100});
}
else
{
if (starting_x - target_x > 0)
{
var new_x = (target_x + Math.floor((starting_x -
target_x) * radix));
}
else
{
var new_x = (target_x + Math.ceil((starting_x -
target_x) * radix));
}
if (starting_x - target_x > 0)
{
var new_y = (target_y + Math.floor((starting_y -
target_y) * radix));
}
else
{
var new_y = (target_y + Math.ceil((starting_y -
target_y) * radix));
}
var new_opacity = target_opacity + (starting_opacity
- target_opacity) * radix;
journey(index, new_x, new_y, target_x, target_y,
new_opacity, target_opacity, delay, radix);
}
}
Спасибо; причиной, которую вы выделили в качестве путаницы, был преступник. Величина i-го числа, равного 1, была равна 0,99, и в данном случае цифра -99 умножалась на радиус, давая -98.01, а затем, поскольку у меня было другое измерение во втором условном выражении, Math.floor() ed до другого -99, что дает бесконечный цикл. – JonathanHayward
P.S. Я заметил вашу ручку; есть обсуждение «сына и племянника короля Артура, Мордреда» в http://JonathansCorner.com/grail – JonathanHayward