Выполнение Ajax при скроллинге до определённого места
Есть код, который показывает кнопки с социальных сетей для публикации заметки.
Сейчас код срабатывает при нажатии на ссылку Опубликовать у себя в социальной сети
При нажатии делается запрос и в определённое место (Ajax ) вставляется необходимый javascript блок для отображения кнопок без перезагрузки страницы.
Но нужно ОБЯЗАТЕЛЬНО нажать кнопку!
Можно ли запустить «автонажатие» (либо сразу выполнить необходимый код) на эту ссылку при скроллинге до ссылки?
javascript
размещение на странице
Сейчас код срабатывает при нажатии на ссылку Опубликовать у себя в социальной сети
При нажатии делается запрос и в определённое место (Ajax ) вставляется необходимый javascript блок для отображения кнопок без перезагрузки страницы.
Но нужно ОБЯЗАТЕЛЬНО нажать кнопку!
Можно ли запустить «автонажатие» (либо сразу выполнить необходимый код) на эту ссылку при скроллинге до ссылки?
javascript
<script type="text/javascript" src="http://yandex.st/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// Вешаем обработчик события "клик" на все ссылки с классом ajax_link
$('a.ajax_link').click(function() {
// Берем действие из атрибута data-action ссылки
var action = $(this).data('action');
// Ajax запрос к текущей страницы (а на ней наш сниппет) методом post
$.post(document.location.href, {action: action}, function(data) {
// Выдаем ответ
$('#result').html(data);
})
// Не даем ссылке кликнуться
return false;
})
})
</script>размещение на странице
<div id="result">
<a href="#" data-action="helloWorld" class="ajax_link">Опубликовать у себя в социальной сети</a>
</div>сниппет<?php
// Откликаться будет ТОЛЬКО на ajax запросы
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
// Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
// Если в массиве POST нет действия - выход
if (empty($_POST['action'])) {return;}
// А если есть - работаем
$res = '';
switch ($_POST['action']) {
case 'helloWorld':
$id = 3330;
$res = $modx->getObject('modResource', $id);
$res = $res->get('content');
break;
}
// Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
if (!empty($res)) {
die($res);
}код ресурса id 3330<script src="https://yastatic.net/es5-shims/0.0.2/es5-shims.min.js" async="async"></script>
<script src="https://yastatic.net/share2/share.js" async="async"></script>
<div class="ya-share2" data-services="vkontakte,facebook*,odnoklassniki,moimir,twitter,viber,whatsapp,telegram" async="async"></div>Пример, как это сейчас работает — тут (сейчас всё работает только при клике на ссылку Опубликовать у себя в социальной сети).
*Meta, которой принадлежат facebook и instagram признана экстремистской в России
Комментарии: 11
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Это не точный код, пишу без проверки синтаксиса. Тут главное, что общая суть ясна. Просто слушаем скрол и проверяем находится ли наш блок в видимой части окна браузера (там толи top элемента, толи bottom, поэкспериментируй сам).
Неужели никто не размещал у себя комментарии facebook или того же вконтакте на MODx?
Решил проблему с выводом картинок и видео youtobe (загрузка только при попадании в фокус), но как решить проблему с Facebook — ума не приложу.
Может потому что это не особо сложно делать, а писать инструкцию к каждому чиху глупо.
Возвращаясь к теме скрипта.
Мне необходимо однократное выполнение кода. Следовательно, надо как-то проконтролировать одноразовое выполнение. Но так как тут же используется lazy load — предвижу некоторые проблемы (т.е. просто убрать событие scroll не получится).
Ну например:
Сам код javascript достаточно нетривиален
Как сделал я (по совету выше)
Открою секрет, modx написан на PHP, JS, HTML и CSS и все, что доступно в них, доступно и в modx
Сам код javascript достаточно НЕтривиален (это не ошибка) (не вписал код)
Не на всех устройствах срабатывает javascript.
Как сделал я (по совету выше)
Всё остальное — как в коде выше в самом начале поста (ссылку доделал).
Осталась проблема срабатывания javascript не на всех устройствах (разные браузеры?)
ФаритВ чём может быть проблема с кодом (я так понял — такая версия браузера)? Может есть другой вариант реализации?