|
10.08.2015, 12:03
|
Аспирант
|
|
Регистрация: 29.01.2015
Сообщений: 81
|
|
Закрытие блока по нажатию в любом месте
Приветствую! Не подскажете как новичку решить проблему?
Есть блок:
<div id="btopen">
<a onclick="document.getElementById('divwin4').style.display='block'"></a>
</div>
<div id="divwin4">
<div id="closeButton" onclick="document.getElementById('divwin4').style.display='none'">Х</div>
Текст который открывается
</div>
Как можно сделать, что бы кнопка закрытия блока действовала в любом месте окна браузера, а не только по нажатию на "Х"?
|
|
10.08.2015, 12:18
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Типично div#btopen обертывают во wraper с абсолютной или фиксированной позицией и шириной-высотой в экран(затемненным или прозрачным фоном) любой клик мимо модального окна приходится по нему, ну или отслеживать любой клик на боди, при одновременном отсутствии клика на #btopen
Последний раз редактировалось Deff, 10.08.2015 в 12:21.
|
|
11.08.2015, 12:42
|
Аспирант
|
|
Регистрация: 29.01.2015
Сообщений: 81
|
|
Сообщение от Deff
|
Типично div#btopen обертывают во wraper с абсолютной или фиксированной позицией и шириной-высотой в экран(затемненным или прозрачным фоном) любой клик мимо модального окна приходится по нему, ну или отслеживать любой клик на боди, при одновременном отсутствии клика на #btopen
|
честно, половину лишь понял из написаного) можно поподробнее?
|
|
11.08.2015, 13:17
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
Что значит "кнопка действовала"? Ты можешь по клику закрыть.
<html>
<head>
</style>
</head>
<body>
<div id="d">foo</div>
<script>
document.body.onclick=function(){
d.style.display="none"
}
</script>
</body>
</html>
|
|
11.08.2015, 14:02
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Закрытие блока по клику вне блока или по кнопке закрыть
maximamus,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#divwin4 {
background-color: #008000;
width: 150px;
height: 150px;
display: none;
}
#closeButton {
background-color: #FF0000;
}
</style>
</head>
<body>
<div id="btopen">
<a>open</a>
</div>
<div id="divwin4">
<div id="closeButton" onclick="">close</div>
Текст который открывается можно кликать
</div>
<script type="text/javascript">
var doc = document,
div = doc.getElementById("divwin4");
doc.onclick = function(a) {
for (a = a.target; a != doc;) {
if ("closeButton" == a.id) {
div.style.display = "none";
return
}
if ("btopen" == a.id) {
div.style.display = "block";
return
}
if ("divwin4" == a.id) return;
a = a.parentNode
}
div.style.display = "none"
};
</script>
</body>
</html>
Последний раз редактировалось рони, 11.08.2015 в 14:04.
|
|
11.08.2015, 14:20
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
рони,
Ну для полного счастья обернуть всё в анонимную функцию
(function() { ... }());
=============
Иначе есть древний велосипед, чтимый начинающими:
<!DOCTYPE>
<html>
<head>
<style>
#closeButton,
a {
cursor:pointer;
}
#closeButton{
display:inline-block;
float:right;
margin-right:12px;
margin-top:-12px;
}
#divwin4 {
padding:12px;
border:red solid 1px;
border-radius:12px;
}
</style>
<script>
window.onload=function(){
document.body.onclick=function(){
if(µ) {µ =false; return;}
document.getElementById('divwin4').style.display="none"
}
}
</script>
</head>
<body style="min-height:400px">
<div id="btopen">
<a onclick="document.getElementById('divwin4').style.display='block';µ=true">Открыть</a>
</div>
<div id="divwin4" style="display:none" onclick="µ=true">
<span id="closeButton" onclick="document.getElementById('divwin4').style.display='none';µ=true;">Х</span>
Текст который открывается
</div>
</body>
</html>
Последний раз редактировалось Deff, 11.08.2015 в 14:34.
|
|
21.08.2015, 11:01
|
Аспирант
|
|
Регистрация: 29.01.2015
Сообщений: 81
|
|
а если этих блоков пара штук, как функцию правильно написать?
у меня каждый новый блок с разным названием id, цифра в конце меняется - divwin4,.. 3,... 2 ну и так далее
|
|
21.08.2015, 11:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
maximamus,
поиск по форуму: открывашка
выберите из более 200 вариантов более вам подходящий
|
|
21.08.2015, 11:56
|
Аспирант
|
|
Регистрация: 29.01.2015
Сообщений: 81
|
|
перебрал пару страниц, ничего и близко не схоже с тем что хочу сделать
помогите доделать этот кусок(
|
|
21.08.2015, 13:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
maximamus,
Открывашка 204 + закрытие по клику вне блока или кнопок чем не оно
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.active-menu-item{background: #FFE4B5;}
div.menu-mega{display:none; width:600px;height:200px;}
div.menu-main-item{display:block; width:200px; height:100px; border:1px solid #333;}
#menu-restoran{background-color: green}
#menu-trade{background-color: pink}
#menu-equipment{background-color: blue}
.closeButton{
display:inline-block;
float:right;
margin-right:12px;
margin-top:12px;
cursor: pointer;
background-color: #FFFF00;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function() {
var $but = $(".menu-main-item"),
$blocks = $(".menu-mega");
$but.each(function(i, elem) {
var $el = $(elem);
$el.click(function() {
$but.not($el).removeClass("active-menu-item");
$el.toggleClass("active-menu-item");
$blocks.filter(function(j, el) {
i == j && $(el).slideToggle();
return i != j
}).slideUp();
})
});
$('html').click(function (event) {
if ($(event.target).closest('.menu-main-item, .menu-mega' ).size() && !$(event.target).is('.closeButton')) return;
$but.filter('.active-menu-item').click()
});
});
</script>
</head>
<body>
<!--использую navbar bootstrap -->
<ul class="menu-main-nav">
<li><a class="menu-main-item" href="#" data-item="menu-restoran">Для ресторанов<i class="main-choise"></i></a></li>
<li><a class="menu-main-item" href="#" data-item="menu-trade">Для торговли<i class="main-choise"></i></a></li>
<li><a class="menu-main-item" href="#" data-item="menu-equipment">Торговое оборудование<i class="main-choise"></i></a></li>
</ul>
<!--Блок выпадающего мегаменю</i> -->
<div class="menu-mega" id="menu-restoran"> <span class="closeButton" >Х</span>
test 1
</div>
<!-- тут дальше еще три блока -->
<div class="menu-mega" id="menu-trade"> <span class="closeButton" >Х</span>
test 2
</div>
<div class="menu-mega" id="menu-equipment"> <span class="closeButton" >Х</span>
test 3
</div>
</body>
</html>
Последний раз редактировалось рони, 27.08.2015 в 20:41.
|
|
|
|