2014-01-27 2 views
0

Я работаю над эффектом на 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).

Целевое поведение:

  1. продукты размеченного вывода, который имеет каждый вынесенный характер вывода (то есть не метка) в своем собственном SPAN.

  2. Переместите символы каждый в свое местоположение.

  3. Двигайте их линейно в исходное и конечное место отдыха, так что расстояние между текущим местоположением и местом назначения будет экспоненциально убывать.

Функция, которая обрабатывает все перемещения точек (и имеющий бесконечную рекурсию) ниже:

  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); 
        } 
       } 

ответ

3

К сожалению, неправильно код. Какова ценность radix, которую вы проходите?

Кроме того, код будет немного легче читать, если вы только имели один

if (starting_x - target_x > 0) 

условно.

+0

Спасибо; причиной, которую вы выделили в качестве путаницы, был преступник. Величина i-го числа, равного 1, была равна 0,99, и в данном случае цифра -99 умножалась на радиус, давая -98.01, а затем, поскольку у меня было другое измерение во втором условном выражении, Math.floor() ed до другого -99, что дает бесконечный цикл. – JonathanHayward

+0

P.S. Я заметил вашу ручку; есть обсуждение «сына и племянника короля Артура, Мордреда» в http://JonathansCorner.com/grail – JonathanHayward