2014-02-08 2 views
0

Итак, я пытаюсь сделать функцию «мягкой автоматической прокрутки» для элемента и полосы прокрутки элементов, в основном ее нужно назвать, а затем прокручивать элемент для вас. Однако, как вы можете видеть в приведенном ниже коде, я инкапсулировал функцию в функцию самозапускания, которая содержит элемент в «элементе». Однако, когда он сначала считывает переменную из возвращаемой функции в строке else if (pos>element.scrollHeight) элемент возвращается в null«Static» удерживающий элемент удерживания переменной теряет значение

'use strict'; 
window.onload=(function() 
{ 
    window.scrollTo=(function() 
    { 
     var element=document.getElementById('more_info'), 
      ease=function(pos) 
      { 
       var diff=(pos-element.scrollTop). 
        increment=(diff/Math.abs(diff)); 

       if (Math.abs(diff)<1) 
       { 
        element.scrollTop=pos; 
        return; 
       } 

       else if (Math.abs(diff)<30) 
       { 
        element.scrollTop+=1-(increment/diff); 
       } 

       else 
       { 
        element.scrollTop+=increment*10; 
       } 

       window.setTimeout(ease,1000/10); 
      }; 
     return function(pos) 
     { 
      if (pos<0) {pos=0;} 
      else if (pos>element.scrollHeight) {pos=element.scrollHeight;} 
      ease(pos); 
     }; 
    }()); 
}()); 

I Обновленный код так, чтобы его называли после загрузки документа, однако мой отладчик, кажется, показывает, что вар элемент все еще вызывается перед window.onload

+0

Не могли бы вы опубликовать скрипку, чтобы воспроизвести проблему? – elclanrs

+2

Знаете ли вы, что элемент уже существует, когда ваш код выполняется? он должен работать, когда вы инкапсулируете все это в событие ready/onload. – metadings

+1

Что вы подразумеваете под «элементом возвращается как« null »? Значение переменной 'element' равно null в этом месте? Функция, которую вы назначаете 'window.scrollTo', не возвращает значение. Кроме того, вы, вероятно, забыли передать 'pos', чтобы« облегчить »в вызове в конце. – Palec

ответ

2

Вы выполняете функцию onload сразу.

window.onload = (function() { 
    ... 
}()); 

Это делает функцию выполнять затем присвоить возвращаемое значение в качестве onload обработчика. Это означает, что он выполняется до готовности DOM. Измените его, чтобы удалить самоисполнение.

window.onload = function() { 
    ... 
}; 
+0

oh jeez ... Я был у него слишком долго, благодаря кучу! –

+1

Время перерыва на кофе! – reergymerej

Смежные вопросы