Наделал костылей, не могу разобратся
ПРивет товарищи! :blink:
Есть страница, на ней список длинный. При нажатии на пункт списка нужно модальное окно, с информацией относящейся к пункту. Надыбал в инете простейший скрипт. :lol: $(window).load(function () { function resize(){ $('#modal').height(window.innerHeight - 50); } $( window ).resize(function() { resize(); }); resize(); function refresh_close(){ $('.close').click(function(){ $(this).parent().fadeOut(200); }); } refresh_close(); var fb1 = '<div id="modal-full">содержимое 1 окна</div>'; var fb2 = '<div id="modal-full">содержимое 2 окна</div>'; var fb3 = '<div id="modal-full">содержимое 3 окна</div>'; $('#f1').click(function(){ $("#modal-full").remove(); $("#modal").append(fb1); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f2').click(function(){ $("#modal-full").remove(); $("#modal").append(fb2); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f3').click(function(){ $("#modal-full").remove(); $("#modal").append(fb3); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); }); Как вы понимаете, если строк ОВЕР Как упростить хотя бы последнюю часть скрипта... Спасайте!!! :help: |
Sk1LL,
что есть .close ? и зачем на этот элемент вешать обработку клика бесконечно? |
рони, крестик в углу модального окна. Там же вроде время затухание указано.
|
Sk1LL,
:-? тот же самый вопрос зачем строки 24, 31, 38? может макет сделать? |
рони, ничего не могу ответить :(
не могу понять как макет из этого сделать: $('#f1').click(function(){ $("#modal-full").remove(); $("#modal").append(fb1); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); Ибо свыше 100 строк, и соответственно 100 таких блоков кода... Логику понимаю работы, но написать не могу (( $('.button').click(function(){ //клик по любой ссылке с классом button $("#modal-full").remove(); // убираем модальное окно $("#modal").append(infoN); // добавляем блоку #modal содержимое VAR с именем infoN - где N = ID нажатой кнопки $("#modal-full").addClass('animated ' + 'effect1'); // ну и анимируем refresh_close(); // добавляем кнопке .close функцию удаления окна и затухания }); не могу сообразить как заставить добавлять в модальное окно инфу соответствующую var fb1 = 'инфа1'; |
Цитата:
|
рони, не-не это все есть. Общий вид всего этого выглядит так.
<div id="modal"></div> в него мы добавляем содержимое var fb1 = '<div id="modal-full">содержимое 1 окна</div>'; ладно фиг с ним что будет var fb2, fb3, fb4 и т.д. Но как сделать что бы получить ID нажатого пункта, пункты выглядят так: <p><a id="f1">Ссылка 1</a></p> <p><a id="f2">Ссылка 2</a></p> <p><a id="f3">Ссылка 3</a></p> я все что не могу понять как заставить по нажатию например ссылки f3 залить в блок с id="modal-full инфу именно из переменной var fb3 = '<div id="modal-full">содержимое 3 окна</div>'; ? |
Sk1LL,
сделайте макет, если конечно вам нужна помощь. |
Sk1LL,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Нужна помощ. Сам не могу разобраться..
|
Нужна помощь. Сам не могу разобраться..
|
Sk1LL,
в чём сложность написать html и css для трёх блоков? |
Sk1LL,
допишите остальное сами <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> <!-- сюда стили для блоков --> </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(window).load(function () { function resize(){ $('#modal').height(window.innerHeight - 50); } $( window ).resize(function() { resize(); }); resize(); function refresh_close(){ $('.close').click(function(){ $(this).parent().fadeOut(200); }); } refresh_close(); var fb1 = '<div id="modal-full">содержимое 1 окна</div>'; var fb2 = '<div id="modal-full">содержимое 2 окна</div>'; var fb3 = '<div id="modal-full">содержимое 3 окна</div>'; $('#f1').click(function(){ $("#modal-full").remove(); $("#modal").append(fb1); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f2').click(function(){ $("#modal-full").remove(); $("#modal").append(fb2); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f3').click(function(){ $("#modal-full").remove(); $("#modal").append(fb3); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); }); </script> </head> <body> <!-- сюда ссылки и тд --> </body> </html> |
рони, вы шутите или нет? Вы вообще о чем? Страница, сверстана, стили написаны, скрипт работает...
Я не могу упростить вот эту конструкцию.. $('#f1').click(function(){ $("#modal-full").remove(); $("#modal").append(fb1); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f2').click(function(){ $("#modal-full").remove(); $("#modal").append(fb2); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); $('#f3').click(function(){ $("#modal-full").remove(); $("#modal").append(fb3); $("#modal-full").addClass('animated ' + 'effect1'); refresh_close(); }); Упростить надо потому что на странице будет более сотни ссылок. И сотня таких блоков в скрипте это ужастно. ..... |
Sk1LL,
получите код, когда раслабитесь и напишите 10 строк, чтобы можно было понять хотбы что такое кнопка close. макет это то что в посте 13 -- ваша страница и сотни кнопок не нужны -- нужны три кнопки для примера, но рабочие |
Цитата:
Sk1LL, Цитата:
|
модальное окно с разным содержимым
:cray:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .overlay { background-color: rgba(0, 0, 0, 0.7); bottom: 0; cursor: default; left: 0; opacity: 0; position: fixed; right: 0; top: 0; visibility: hidden; z-index: 99999; -webkit-transition: opacity .5s; -moz-transition: opacity .5s; -ms-transition: opacity .5s; -o-transition: opacity .5s; transition: opacity .5s; } .popup { background-color: #fff; border: 3px solid #fff; display: inline-block; left: 50%; opacity: 0; padding: 15px; width: 300px; height: auto; position: fixed; text-align: justify; top: 40%; visibility: hidden; z-index: 999999; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); transform: translate(-50%, -50%); -webkit-transition: opacity .5s, top .5s; -moz-transition: opacity .5s, top .5s; -ms-transition: opacity .5s, top .5s; -o-transition: opacity .5s, top .5s; transition: opacity .5s, top .5s; border-radius: 11px; } .popup .close_window { font-size: 13px; display: block; width: 6px; height: 17px; position: absolute; padding: 1px 9px 4px 9px; top: -15px; right: -15px; cursor: pointer; color: #fff; font-family: 'tahoma', sans-serif; border-radius: 50%; text-align: center; box-shadow: -1px 1px 3px rgba(0, 0, 0, 0.5); background-color: #051fb8; } .popup .close_window:hover { background-color: #FF0000; border: 1px solid #00385E; } .popup .close_window:active { background: #8f9be0; } a[id^="f"]{ cursor: pointer; display: inline-block; background-color: #0000FF; color: #fff; border-radius: 8px; padding: 4px 9px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(window).load(function() { var objHtml = { '#f1' : 'содержимое 1 окна', '#f2' : 'содержимое 2 окна', '#f3' : 'содержимое 3 окна' }, close = $(".close_window"), overlay = $(".overlay"), modal = $("#modal").add(overlay), full = $("#modal-full"); $.each(objHtml, function(id, html) { $(id).click(function(event) { event.preventDefault(); full.html(html); modal.css({ "opacity": "1", "visibility": "visible" }) }) }); close.add(overlay).click(function() { modal.css({ "opacity": "0", "visibility": "hidden" }) }) }); </script> </head> <body> <p><a id="f1">Ссылка 1</a></p> <p><a id="f2">Ссылка 2</a></p> <p><a id="f3">Ссылка 3</a></p> <div class="overlay" title="окно"></div> <div class="popup" id="modal"> <div class="close_window">x</div> <div id="modal-full"></div> </div> </body> </html> |
Я тоже нихрена не понял, но Ванга с первого же поста предсказала ваше любимое делегирование. То есть нужен небольшой роутер на родительском элементе, который будет разбирать что именно нажато и если нажато что именно - загружать что затребовано куда надо.
|
Цитата:
Информации - овердохуя. Модальное окно - 1 шт. Все просто. Жмешь на пункт, получаешь инфу, пихаешь ее в блок. |
Тупикал задача - вывести доп-инфо из листинга в оверхдоухя тумбочек по щелчку на элементе в тумбочке. Скажем в тумбе фотка, название, цена. Щелкаем по "Быстрый просмотр" получаем блок поверх листинга с фоткой, ценой, названием, размерами, описанием и тыр-пыр.
|
Ну давайте руссусолю, разжую.
В коде Script есть повторяющиеся блоки. Надо сделать 1, я имею ввиду ту часть которая срабатывает при клике. То что написал рони я не совсем понимаю. У меня не получается, я знаю что есть простейшая фича как запросить ID элемента $(this).attr('id') но как заставить сопоставить этот ID с переменной var t3 = ' '; <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Modal</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> </head> <body> <style> .animated {-webkit-animation-duration: 1s;animation-duration: 1s;-webkit-animation-fill-mode: both;animation-fill-mode: both;} .animated.infinite {-webkit-animation-iteration-count: infinite;animation-iteration-count: infinite;} .animated.hinge {-webkit-animation-duration: 2s;animation-duration: 2s;} @-webkit-keyframes zoomIn { 0% {opacity: 0;-webkit-transform: scale3d(.3, .3, .3);transform: scale3d(.3, .3, .3);} 50% {opacity: 1;} } @keyframes zoomIn { 0% {opacity: 0;-webkit-transform: scale3d(.3, .3, .3);transform: scale3d(.3, .3, .3);} 50% {opacity: 1;} } .zoomIn {-webkit-animation-name: zoomIn;animation-name: zoomIn;} #notifications {float: left;width: 100%;overflow: hidden;height: 100%;position: relative;} #notifications-window {height: 400px;width: 700px;position: absolute;left: 50%;top: 20%;margin-left: -352px;} #notifications-full{height: 300px;width: 530px;background-color: rgba(0,0,0,.5);position: fixed;margin-top: 10%;margin-left: -265px;z-index: 2;left: 50%;top: 10%;} </style> <div id="btn1">Кнопка 1</div> <div id="btn2">Кнопка 2</div> <div id="btn3">Кнопка 3</div> <div id="notifications"><div id="notifications-window"></div></div> <script> $(window).load(function () { function resize(){ $('#notifications').height(window.innerHeight - 50); } $( window ).resize(function() { resize(); }); resize(); function refresh_close(){ $('.close').click(function(){ $(this).parent().fadeOut(200); }); } refresh_close(); var t1 = '<div id="notifications-full"><div class="close">закрыть</div><div id="notifications-full-text">содержимое 1</div></div>'; var t2 = '<div id="notifications-full"><div class="close">закрыть</div><div id="notifications-full-text">содержимое 2</div></div>'; var t3 = '<div id="notifications-full"><div class="close">закрыть</div><div id="notifications-full-text">содержимое 3</div></div>'; $('#btn1').click(function(){ $("#notifications-full").remove(); $("#notifications").append(t1); $("#notifications-full").addClass('animated ' + 'zoomIn'); refresh_close(); }); $('#btn2').click(function(){ $("#notifications-full").remove(); $("#notifications").append(t2); $("#notifications-full").addClass('animated ' + 'zoomIn'); refresh_close(); }); $('#btn3').click(function(){ $("#notifications-full").remove(); $("#notifications").append(t3); $("#notifications-full").addClass('animated ' + 'zoomIn'); refresh_close(); }); }); </script> </body> </html> |
Sk1LL,
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Modal</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> </head> <body> <style> .animated {-webkit-animation-duration: 1s;animation-duration: 1s;-webkit-animation-fill-mode: both;animation-fill-mode: both;} .animated.infinite {-webkit-animation-iteration-count: infinite;animation-iteration-count: infinite;} .animated.hinge {-webkit-animation-duration: 2s;animation-duration: 2s;} @-webkit-keyframes zoomIn { 0% {opacity: 0;-webkit-transform: scale3d(.3, .3, .3);transform: scale3d(.3, .3, .3); } 50% {opacity: 1;} } @keyframes zoomIn { 0% {opacity: 0;-webkit-transform: scale3d(.3, .3, .3);transform: scale3d(.3, .3, .3);} 50% {opacity: 1;} } .zoomIn {-webkit-animation-name: zoomIn;animation-name: zoomIn;} #notifications {float: left;width: 100%;overflow: hidden;height: 100%;position: relative;} #notifications-window {height: 400px;width: 700px;position: absolute;left: 50%;top: 20%;margin-left: -352px;} #notifications-full{height: 300px;width: 530px;background-color: rgba(0,0,0,.5);position: fixed;margin-top: 10%;margin-left: -265px;z-index: 2;left: 50%;top: 10%;} #notifications-full{ display: none; } </style> <div class="btn">Кнопка 1</div> <div class="btn">Кнопка 2</div> <div class="btn">Кнопка 3</div> <div id="notifications"><div id="notifications-full"><div class="close">закрыть</div><div id="notifications-full-text"></div></div></div> <script> $(window).load(function () { function resize(){ $('#notifications').height(window.innerHeight - 50); } $( window ).resize(resize).trigger('resize'); $('.close').click(function(){ $(this).parent().fadeOut(200); }); var arr = ['содержимое 1','содержимое 2','содержимое 3']; var btn = $('.btn') btn.click(function(){ var i = btn.index(this); $("#notifications-full-text").html(arr[i]); $("#notifications-full").css({display: "block"}).addClass('animated ' + 'zoomIn'); }); }); </script> </body> </html> |
рони, вот это от души спасибо!"!
|
Часовой пояс GMT +3, время: 15:27. |