Наделал костылей, не могу разобратся
ПРивет товарищи! :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, время: 03:16. |