изменение скорости анимации window.load scrollTop в зависимости от страницы

Я настроил свой сайт для прокрутки мимо обязательного элемента заголовка, используя scrollTop для определенной функции div. Я специально установил медленную прокрутку, чтобы пользователь «знал, что заголовок находится там», но на последующих страницах я бы предпочел просто начать с этой позиции прокрутки.

Я пытаюсь использовать простой оператор if/else, чтобы захватить страницу wordpress (is_home) и установить анимацию на 1200, в противном случае установить анимацию на 0. Я даже зашел и настроил настраиваемое поле на странице is_home. и Правда. Но это все еще не работает. Любые идеи, как исправить if/else или предложения по лучшему способу реализации?

if (is_home()) {
    $(window).load(function () {
        $('html, body').animate({
            scrollTop: $("#grey").offset().top
        }, 1200);
    });
} else {
    $(window).load(function () {
        $('html, body').animate({
            scrollTop: $("#grey").offset().top
        }, 0);
    })
}

person cebronix    schedule 13.12.2013    source источник


Ответы (2)


Что ж, if(is_home()) — это оператор php из WordPress API, которого нет в JS. Вы можете включить различные вызовы сценариев на основе этого, но, на мой взгляд, это довольно плохая практика.

Убедитесь, что приведенное ниже выполняется после вашего плагина и, очевидно, jquery. Хорошее место может быть после wp_footer()

<?php 
if (is_home()) { ?>
    <script>
    $(window).load(function () {
        $('html, body').animate({
            scrollTop: $("#grey").offset().top
        }, 1200);
    });
    </script>    
<?php } else { ?>
    <script>
    $(window).load(function () {
        $('html, body').animate({
            scrollTop: $("#grey").offset().top
        }, 0);
    });
    </script>
<?php } ?>
person SMacFadyen    schedule 13.12.2013
comment
Ага. Глупая ошибка с моей стороны. Спасибо! - person cebronix; 13.12.2013
comment
Без проблем. Кстати, я первый ответил, а парень выше скопировал :( - person SMacFadyen; 14.12.2013
comment
Передвинул галочку, но я не могу ни за кого проголосовать. Нет респ. - person cebronix; 28.02.2014

Вы объединяете php и JavaScript вместе. is_home() — это оператор PHP. Вам нужно переписать код, как показано ниже:

<?php
    if (is_home()) {
 ?>
        <script type="text/javascript">
            $(window).load(function () {
                $('html, body').animate({
                    scrollTop: $("#grey").offset().top
                }, 1200);
            });
        </script>
<?php 
    } else {
?>
        <script type="text/javascript">
            $(window).load(function () {
                $('html, body').animate({
                    scrollTop: $("#grey").offset().top
                }, 0);
            });
        </script>        
<?php 
    } 
?>

Также используйте jQuery вместо $, чтобы избежать конфликта с другими библиотеками JavaScript.

person Sabari    schedule 13.12.2013
comment
Потрясающий. Это отлично сработало. Мне пришлось заменить (is_home()) на (is_front_page), но это было именно то, что мне было нужно. Я даже не думал о php против js. Спасибо! - person cebronix; 13.12.2013