2016-09-26 5 views
0

Я делаю прогрессбар и хочу, чтобы он играл, когда он находится в окне просмотра. Я получил эту работу, но код теперь выполняется каждый раз, и мне нужно, чтобы он запускался только один раз. Потому что теперь он создает несколько прогрессивных баров. ;-) Код, указанный ниже, используется в расширении Joomla.jquery run once .one() in viewport

(function ($) { 
    $(document).ready(function() { 
    // Function that checks if it is in view. 
    $("<?php echo '#progress' . $module->id ?>").waypoint(function() { 
     // Function that makes sure it only runs once. 
     // -----------I need to use .one() here but how? 
     // The location of the progressbar code for now lets put a alert in. 
     alert("run only once"); 
    }, { 
     offset: '50%' 
    }); 
    }); 
})(jQuery); 

Я читал о функции .one() и как ее использовать здесь. Но я попробовал примеры, которые используют click и ready, а клик - это не то, что я хочу, но готовый должен сделать трюк, но ничего не получилось.

+0

_ «но код теперь выполняется каждый раз, и мне нужно запустить только один раз.» _ Ли вы имеете в виду, что функция должна вызываться только один раз в '.ready()' или один раз для каждого браузера сессия? – guest271314

+0

@ guest271314 Код должен вызываться только один раз на .ready() Я думаю. Я хочу, чтобы он работал, когда страница загружена, а div находится посередине экрана. – purple11111

+0

@KevinB _ «Путевые точки - это библиотека, которая упрощает выполнение функции всякий раз, когда вы переходите к элементу». _ Верьте, что OP пытается вызывать обработчик не более одного раза. См. [Путевые точки] (https://github.com/imakewebthings/waypoints), если это тот же плагин. – guest271314

ответ

1

В качестве параметра можно использовать $.Callbacks() с "once".

(function ($) { 
    $(document).ready(function() { 

    function runOnce() { 
     // Function that makes sure it only runs once. 
     // -----------I need to use .one() here but how? 
     // The location of the progressbar code for now lets put a alert in. 
     alert("run only once"); 
    } 

    var callbacks = $.Callbacks("once"); 

    callbacks.add(runOnce); 
    // Function that checks if it is in view. 
    $("<?php echo '#progress' . $module->id ?>").waypoint(function() { 
     callbacks.fire(runOnce); 
    }, { 
     offset: '50%' 
    }); 
    }); 
})(jQuery); 
+0

"downvote" описание? – guest271314

+0

Это работает отлично. Сначала я попробовал это с предупреждением. Джекпот. Затем с кодом progressbar и снова отличный результат. Большое спасибо. – purple11111

+1

Знаете ли вы, почему вопрос опущен? или где вы можете увидеть причину понижения! – purple11111