Система всплывающих сообщений
Вложений: 1
В общем, решил сделать вот такую систему всплывающих сообщений-подсказок. Надеюсь, кому-нибудь пригодится. :)
Версия 2.0 Работает в IE7+ В IE7-8 не отображается тень и круглые углы В IE7-9 не работают эффекты анимации Подключение: Для подключения необходимо подключить в head (не обязательно в head, но лучше в head) вашего документа *js и *css файлы: <link href="Message-2.0.css" rel="stylesheet" type="text/css"> <script src="Message-2.0.js" type="text/javascript"></script> Все файлы Вы сможете найти в архиве, который прикреплён ниже. Настройка: В *js файле Вы можете найти в самом начале следующие переменные: var DELAY = 5000, //длительность отображения сообщения, 1000 = 1 секунда. По умолчанию 5000 (5 секунды). ICON = '', //иконка, которая будет устанавливаться по умолчанию, если не передан параметр «icon». ICON_DIR = '', //директория к папке с иконками, например: '/desing/icons/'. Это позволит сократить Ваш код и не прописывать каждый раз полную директорию к файлу иконки. ICON_FORMAT = ''; //формат иконок, например: 'png'. Это позволит сократить Ваш код и не прописывать к каждой иконке формат Рекомендуется хранить все иконки в одной папке и в одном формате (например *png), и указать эти данные в переменные ICON_DIR и ICON_FORMAT. Благодаря этому, вместо пути к иконке можно будет просто указывать имя файла нужной иконки - это позволит очень даже облегчить написание кода, а также снизит его объём. :) Документация: Для создания всплывающего окна используется следующий класс (красным помечены обязательные параметры): Примеры использования: //Создаём сообщение var msg = new Message('Заголовок', 'Текст'); //Устанавливаем нужные параметры msg.delay = 3000; //3 секунды msg.icon = '/files/icons/myIcon.png'; //Вешаем события msg.onclick = function() { alert('Вы кликнули по всплывающему сообщению!'); } msg.onhide = function() { alert('Сообщение исчезло!'); } //Выводим сообщение на экран msg.show(); //Создаём одноразовое сообщение и сразу выводим его, после исчезновения сообщение будет удалено из памяти new Message('Приветствие', 'Всем привет!', '/icons/hello.png').show(null, true); Живые примеры: http://learn.javascript.ru/play/blUGbb Скачать: Вложение 2531 |
А можно лучше пример на jsfiddle, а то сам знаешь что с learn.javascript.ru :(
Я ради забавы недавно тоже написал уведомлялку, хотелось бы сравнить) |
Safort, добавил ссылку на jsfiddle.net :)
|
Ruslan_xDD,
я уже скачал и у себя запустил) Скажем так, плеер у тебя лучше выглядел :) |
Ruslan_xDD,
font-size: 9pt; в ie невлазит |
Safort, на белом фоне не очень смотрится. :) Если фон подогнать на весь документ, то вполне нормально должно смотреться, так как сами "сообщения" немного прозрачные. Но в любом случае, стили можно под себя подправить. Позже ещё сделаю тёмную версию. :)
рони, спасибо, поправим, не тестил просто в IE. ;) |
рони, протестировал на IE9-11, всё нормально работает. Можешь скрин сделать?
|
UPD: немного изменил стили, думаю теперь лучше смотрится.
|
|
рони, ну ничего себе у тебя в IE шрифт большой, спасибо. :) Есть какие-нибудь идеи по этому поводу? Может в самом font-family проблемы?
|
|
рони, странно, что font-family с родителя не применяется. :-?
|
Насчет transitionend - нет. Это ненадежное событие. Я, к примеру, парсил свойство transition-duration. Хотя разнообразие временных единиц измерения и префиксы доставят хлопот.
В целом - с виду не плохо. Люблю минимализм в коде. Но было бы здорово предусмотреть особое поведение при переполнении экрана (правда хз че за поведение должно быть). |
danik.js, тоже сначала думал распарсить transition-duration, но как-то очень-очень-очень влом, да и зачем? :)
Цитата:
Например, в той же форме если будет вылазить ошибка, либо ID присвоить для "сообщения", либо дисейблить саму кнопку формы на какое-то время, чтобы по ней нельзя было так часто делать проверку на валидацию, вызывая сообщение. |
Ruslan_xDD,
круто. но проработай над репкой - гитбах, тестирование, вики и связки с фреймворками.... бла бла бла) ЗЫ практика показывает, что важно не только хорошо кодить, но и уметь представить свой продукт, чего я не умел и чему всем желаю обучиться |
melky, гитбах. :D В нём я пока не разобрался, но думаю со временем разберусь, спасибо :)
Цитата:
|
Цитата:
связки - обвязка твоего скрипта для быстрого старта на каком-нибудь фреймворке. например, плагин для jquery, директива\сервис для angular и компонент для react хотя последнее, наверное, будет излишним :) |
melky, ясно, спасибо. Ну чтож, буду разбираться. :)
|
:-? В операх до 17 = не работает...
Поставил + Фишка достаточно востребована |
Deff, спасибо. :) Странно, а консоль что пишет? :-?
P.S.: проверил на 12-ой опере - всё работает на ура. Как-нибудь можно мою оперу 25+ эмулировать на 17-ю версию? |
Ruslan_xDD, ООП где?
new Message(/*{Object}*/options); new Message(option1, option1, option1, ...); // или message.show(); message.hide(); // message.show().then(); // message.hide().then(); message.remove(); new MessageManager(messages) {} manager.add(message); manager.add(message); manager.remove(message); manager.clear(); manager.entries(); manager.showAll(); :) |
nerv_, а как насчет функции message, которая возвращает объект?
Что-то вроде window.open(). По-моему так удобней. Иконку сделать третьим необязательным параметром. |
Кстати нафиг там проверка '\v' != 'v' ?
|
danik.js, это для поддержки IE8 будет служить, хотел вчера сделать, но решил на потом отложить, забыл убрать. :)
nerv_, а зачем оно? Тут то простые сообщения, ничего такого. Не понимаю даже, для чего могут пригодиться методы для принудительного скрытия сообщения. :) Это как new Alert() :D P.S.: сегодня может ещё допилю, что-нибудь переделаю. :) |
Цитата:
|
Цитата:
// пишешь $(some); // а по факту происходит new jQuery(some); Цитата:
Цитата:
Впрочем, если ты не понимаешь зачем здесь ООП, думаю, не буду объяснять :) |
nerv_, в принципе я понял, о чём ты. Буду ещё продумывать.
Думаю, тогда сейчас переделаю весь JS код, сделаю в стиле ОПП: new Message(title, text). |
nerv_, не соглашусь тут. Учитывая что большинству нафиг не нужен объект для управления, то вариант с функцией выглядит лучше.
new Message('bla bla'); .. new Message('bla bla'); Выглядит странновато. Оно просто тут не нужно. Цитата:
document.createElement('img'); //а по факту происходит new Image(); :) Правда тут скорее наоборот, ибо создаваемый элемент имеет связи с document, но речь не об этом. А вот код реализации переписать - это да, тут аргумент ООП уже не оспоришь. |
В общем, нашёл вчера время и полностью переписал весь код. Обновил до версии 2.0, теперь всё на ООП. :) Смотрите первый пост.
|
если нажать на совет и подождать пока пропадет - при повторном нажатии ошибка
|
nice_try, в самом примере ошибка была, исправил.
|
Цитата:
Я писал когда тест был в теле первого сообщения |
Еще бы замечательно сделать необязательный параметр для "некоторых" всплывающих сообщений, чтобы они не исчезали, до того момента пока пользователь не кликнет по нему....
|
Часовой пояс GMT +3, время: 02:33. |