- Как сделать заставку на сайт
- AdSense только при первом заходе на сайт
- Появляющееся окно по щелчку (см. пример формы "Заказать обратный звонок" для сайта)
- Форма во всплывающем окне (см. пример)
- Создание модального окна, появляющегося при клике на чистом CSS
- Код подсказки, видимой при наведении курсора мышки
- Два события вызывают одну функцию в JavaScript
Я полностью согласна, что модальные окна с затемнением надоели и сильно нервируют. Даже есть такое требование к веб-ресурсам в AdSense "Сайты... не должны... содержать всплывающие окна, затрудняющие навигацию". Но что такое "всплывающие окна, затрудняющие навигацию" мне так и не растолковали (ссылка на ветку официального форума). Если вы обладаете поддержкой сотрудников AdSense по электронной почте, то задайте, пожалуйста, им сей вопрос.
Я же по прежнему считаю, что pop-up — это всего лишь инструмент, который можно использовать и во благо. Например, для информирования посетителей о переезде фирмы в этот день.
В целом я бы выделила следующие пункты, которых следует придерживаться:
- объявление показывается постоянным посетителям, а не тем, кто впервые зашёл на веб-проект,
- объявление показывается одному человеку только один раз вне зависимости от страницы, на которую он попал (JavaScript),
- минимум анимации, послание появляется спустя какое-то время нахождения человека на странице (CSS),
- простое закрытие: активное "затемнённое" поле, заметный крестик, действие кнопки Esc.
Рассмотрим создание именно такого простого, но симпатичного и "резинового", всплывающего окна на HTML5.
<style>
#popup {
display: table;
position: fixed; top: 0; left: 0;
z-index: 100;
height: 100%;
width: 100%;
background: rgba(240,240,240,.9);
visibility: hidden;
animation: animaciya 1s 5s forwards; /* 5s - это количество секунд по истечении которых появляется сообщение */
cursor: pointer;
}
@keyframes animaciya {
from {visibility: hidden;}
to {visibility: visible;}
}
#popup figure {
display: table-cell;
vertical-align: middle;
}
#popup div, #popup figcaption, #popup figure:before {
max-width: 500px; /* максимальная ширина */
margin: 0 auto;
border-style: solid;
border-color: rgb(88,125,164);
background: #fff;
}
#popup figure:before { /* стиль кнопки "закрыть" */
content: "закрыть";
display: block;
padding: 0 1%;
border-width: 4px 4px 0 4px;
border-radius: 5px 5px 0 0;
text-align: right;
color: rgb(88,125,164);
}
#popup div, #popup figcaption {
padding: 1%;
cursor: default;
}
#popup figcaption {
position: relative;
border-width: 0 4px 0 4px;
font-size: 150%;
text-transform: uppercase;
color: rgb(100,100,100);
}
#popup figcaption:before { /* стиль восклицательного знака, не поддерживается Google Chrome. Его можно заменить на что-то более приемлемое */
content: "\26a0 \20 \20";
color: red;
font-size: 150%;
vertical-align: middle;
}
#popup div {
border-width: 0 4px 4px 4px;
border-radius: 0 0 5px 5px;
}
</style>
<div id="popup">
<figure>
<figcaption>заголовок</figcaption>
<div>содержание</div>
</figure>
</div>
<script>
window.onkeyup = okno; // нажатие Esc, см. условие "e.keyCode==27"
document.getElementById('popup').onclick = okno;
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' || e.keyCode==27) { // через && перечисляются теги, клинкув на которые окно не будет закрыто; сюда же можно включить тег A или IFRAME
document.getElementById('popup').style.display='none';
localStorage.setItem('popup1', 'none');
}
}
if(localStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
</script>
67 комментариев:
Касательно вашего вопроса о "всплывающих окнах, затрудняющих навигацию".
Гугл здесь руководствуется тем же правилом, что и для всего остального: "содержимое для робота должно быть идентичным содержимому для людей". Также, алгоритм, по которому он (гугл) реагирует на всплокна, похож на алгоритм блокировки всплокон браузерами (при включении соответствующей блокировки).
Определения "вредности" самого же контента этих окон у поисковой системы нет. Если код чистый, писать можете что угодно (почти).
В качестве примера: у меня на сайте http://hitechdevice.net/ на странице любого товара реализованы всплывающие окна на Jquery (картинки), Ajax (добавление в корзину) и javascript (ваше всплокно). Разная реализация и контент, но пока они "белые", гуглу на них плевать.
Но тут есть и нюансы. Не нужно думать, что гугл дурак и размещать на страницу с баннерами "чистое" всплокно с призывом "нажмите на рекламу, для мира во всём мире". Хоть такое окно и не повлияет на позиции сайта, но в Adsense это вычисляет на раз и просто заблокирует ваши рекламные выплаты.
Например, на Авито я видела плавающий блок с рекламой AdSense. Можно легко настучать, но автоматом это не вычисляется.
Мой вопрос относится именно к AdSense (не к поиску), именно к чей-то жалобе.
Вообще, любое стимулирование посетителей к нажатию на рекламу, будь то всплывающие окна или что угодно другое - это грех.
Коротко по пунктам:
1. "Это любые окна, которые появляются и при щелчке по кнопке"... или автоматически.
2. Нет. Да. Нет.
3. Нет.
4. Оба примера приемлемы.
Кстати вот тут точное определение "затрудняющие навигацию" https://support.google.com/adsense/answer/1346295?hl=ru&ref_topic=1271508&rd=1#Placing_Google_ads_on_a_website_with_pop-ups
И слово "белые" или "чистые" я употреблял только в контексте отношения гугла к коду. СЕО тут не при чем.
Если у вас всё еще будут вопросы - задавайте. А то я могу просто пропустить что-то из-за кажущейся очевидности темы.
Если как вы говорите, что всплывающие окна - это окна, появляющиеся и при щелчке по кнопке. То как быть с Lightbox? То есть, когда нажимаешь на картинку, а она во весь экран разрастается? Код строится по тем же принципам.
А вот если страница открывает новые окна или вкладки браузера, то это уже другое дело. Тут надо быть аккуратным. Не зря большинство таких окон и блокируются браузерами. Именно потому, что всякие onmousover="window.open" и т.п. зачастую используется для накрутки.
Ну и самое главное: какие бы у вас не присутствовали всплывающие окна, держите их подальше от adsense блоков. Если вы не будете пытаться накручивать показы/клики, то сможете спокойно использовать сколько угодно и каких угодно окон.
Тег <script></script> с содержимым лучше запихнуть в конец страницы, так страница будет быстрее грузиться.
В принципе, можете и так как есть, весь код из статьи внести на HTML страницу - работать будет, но это не совсем корректно.
script В страницу сайта самый низ
style В CSS тоже все в самый низ поставил и убрал теги style с начала и в конце
а куда вставлять код заголовок и содержание не могу понять я поставил в страницу сайта но не фига не получается не знаю почему может объяснишь по подробней за ранее спасибо
Все что начинается с "div id="popup"" и заканчивается "/script" кидай в index.php, т.е. на главную страницу, то что в тегах style/style кидай в стили css.
Что значит index.php ты имел виду текставой файл и через него сделать html ссылку или что поясни?
localStorage.setItem('popup1', 'none');
if(localStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
Большое спасибо за пример, вполне применимое решение.
Главный вопрос, как всплывающие окно применить только для одного браузера, интересует internet exploer
ПС.. есть страницы где IE не понимает того или иного скрипта, собственно потому, ищу решение
Причем на Вашей страничке скрипт отрабатывает, а на моей без префиксов не работал.
https://www.google.ru/search?ie=UTF-8&hl=ru&q=localStorage%20%D0%BE%D0%B4%D0%B8%D0%BD%20%D0%B4%D0%B5%D0%BD%D1%8C#hl=ru&newwindow=1&q=localStorage+24+hours
А так, подумаю на досуге.
Что именно не работает в Хроме? Сейчас что Хром, что Опера, без разницы, они на одном движке сидят.
Некоторые используют скрипты, которые автоматом ставят префиксы. К тому же их (префиксы) скоро отменят. Поэтому я ими пренебрегаю. Но вам не стоит делать как я, особенно если рассчитываете на поддержку старых браузеров.
если надо могу тестовый исходник скинуть куда-нибудь...
может пригодится кому)) кстати хорошо бы было бы куки прикрутить....
localStorage - это и есть куки, только на стороне пользователя.
кстати я опять напутал))) у меня браузер portable и очищает куки каждый раз как закрывается....
Я в статье использовала sessionStorage, так как это пример и удобней чтобы он был продемонстрирован каждый раз при заходе на страницу.
if(localStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
"он показывался 1 раз в сутки" - вместе с display запоминать дату
Если меняю тут ничего не выходит если еще где-то то перекашивает, видать знаний моих в css маловато
#popup {
display: table;
position: fixed; top: 0; left: 0;
http://shpargalkablog.ru/2012/04/vertical-align.html#table-cell
http://shpargalkablog.ru/2011/03/svoistva-margin-padding.html#m-auto :
#popup figure {
vertical-align: top;
}
#popup div, #popup figcaption, #popup figure::before {
margin: 0 0 0 auto;
}
Подскажите, пожалуйста, как в следующих ваших разработках изменить условие "открывается 1 РАЗ" :
а) Отменить совсем.
б) Установить число открываний при загрузке.
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' || e.keyCode==27) {
document.getElementById('popup').style.display='none';
localStorage.setItem('popup1', 'none');
}
}
if(localStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
на
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' || e.keyCode==27) {
document.getElementById('popup').style.display='none';
if(localStorage.getItem('popup1')) {
localStorage.setItem('popup1', parseFloat(localStorage.getItem('popup1')) + 1);
} else {
localStorage.setItem('popup1', '1');
}
}
}
if(parseFloat(localStorage.getItem('popup1')) > 3) { // вместо 3 своё значение
document.getElementById('popup').style.display='none';
}
только вопрос
как в кнопку "закрыть" вставить ссылку
<div><img src="http://4.bp.blogspot.com/-eJraU5lCufs/UFa8PpMUv8I/AAAAAAAADLQ/Y5SGHBd91-Q/s1600/smail-bolshoi-palets-vverh.gif" alt="Смайлик большой палец вверх" height="104" width="147" title="Отлично!"/></div>
У меня на сайте модальное окно воспроизводится всего один раз за всё время… Мне нужно, что бы оно воспроизводилось пользователю при каждом новом заходе на сайт.
К примеру: Пользователь посетил мой сайт и ему всплыло это модальное окно (это для социального виджета «лайкнуть страницу в Фейсбуке»), после чего окно не появляется пока пользователь на сайте. Но при повторном возращении на сайт, чтобы всё повторялось опять, пользователь перешёл на сайт – окно появилось… Собственно в точности как у вас сейчас на сайте, я так понимаю, так как у вас окно появляется как только я повторно возвращаюсь к вам на сайт.
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' || e.keyCode==27) {
document.getElementById('popup').style.display='none';
sessionStorage.setItem('popup1', 'none');
}
}
if(sessionStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
window.onkeyup = okno;
document.getElementById('popup').onclick = okno;
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' || e.keyCode==27) {
document.getElementById('popup').setAttribute('style', 'visibility: hidden !important;');
localStorage.setItem('popup1', 'none');
if (document.getElementById('popupOn').innerHTML == '') {
oknoOn();
}
}
}
function oknoOn() {
var theButton = document.createElement('button');
theButton.innerHTML = 'Ау, я тут';
theButton.setAttribute('onclick', 'document.getElementById("popup").setAttribute("style", "visibility: visible; animation: none;")');
document.getElementById('popupOn').appendChild(theButton);
}
if(localStorage.getItem('popup1')) {
document.getElementById('popup').setAttribute('style', 'visibility: hidden !important;');
oknoOn();
}
http://caniuse.com/#feat=namevalue-storage
Что-то типа:
Больше не показывать окно
....
if(localStorage.getItem('popup1')) {
if (document.getElementById('checkbox').checked==true)
document.getElementById('popup').style.display='none';}
...
<input type="checkbox" id="popupCN">
<script>
window.onkeyup = okno; // нажатие Esc, см. условие "e.keyCode==27"
document.getElementById('popup').onclick = okno;
function okno(e) {
if (e.target.nodeName != 'DIV' && e.target.nodeName != 'FIGCAPTION' && e.target.nodeName != 'INPUT' || e.keyCode==27) { // через && перечисляются теги, клинкув на которые окно не будет закрыто; сюда же можно включить тег A или IFRAME
document.getElementById('popup').style.display='none';
}
}
document.getElementById('popupCN').onclick = function() {
if(this.checked) {
localStorage.setItem('popup1', "true");
}
}
if(localStorage.getItem('popup1')) {
document.getElementById('popup').style.display='none';
}
</script>