Цитата:
|
Цитата:
<head>
<style>
.float {
height: 20px;
background: yellow;
}
.size {
height:100px
}
</style>
</head>
<body>
<a href="http://mail.ru">Mail.ru</a>
<div class="float"></div>
<script>
(function () {
var element = document.querySelector('.float');
document.onclick = function (event) {
event = event || window.event;
var target = event.target || event.srcElement;
if (target.tagName == "DIV" && (target.className == 'float' || target.className == 'float size')) {
element.className = 'float' + (target.className == 'float' ? ' size' : '');
return false;
}
if (element.className == 'float size') {
element.className = 'float';
}
}
})();
</script>
</body>
http://learn.javascript.ru/play/FaPQPb |
$('.float').click(function() {
$('.float').toggleClass('size');
});
$(document).click(function(event){
if($(event.target).hasClass('float') return;
if(!$(event.target).hasClass('size') && $('.float').hasClass('size')){
$('.float').toggleClass('size');
}
});
Вообще пробую так как написал выше. Делаю проверку, если клик на элементе, то возврат. Если клик вне элемента и элемент имеет класс size то тогда убирать класс у него. На одном элементе работает такая схема, а когда элементов несколько то беда... Задача была у меня следующая: есть 4 картинки с описанием каждой, при клике на картинку необходимо увеличивать ее размер и показывать описание, мой способ работает если документ один, когда элементов несколько не хочет, плывет css весь( и вообще похоже это все на говнокод) я слабоват еще) |
Мой вариант, переписанный с использованием jQuery и слегка измененный.
<style>
.float{height: 20px;background: yellow;margin-bottom:10px;}
.size{height:100px}
</style>
<div class="float"></div>
<div class="float"></div>
<div class="float"></div>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
(function(){
var $target = null;
var skipClick = false;
var onDocumentClick = function() {
$target.removeClass('size');
$target = null;
return false;
};
var onElementClick = function() {
if (!skipClick) {
setTimeout(function(){
$(document).one('click', onDocumentClick);
});
skipClick = true;
$target = $(this);
$target.addClass('size');
return false;
}
skipClick = false;
};
$('.float').click(onElementClick);
})();
</script>
|
<!DOCTYPE HTML>
<head>
<style>
.float {
height: 80px;
background: yellow;
width:120px;
margin: 5px;
float: left;
}
.size {
height:160px
}
</style>
</head>
<body>
<div class="float">
<div>Test</div>
</div>
<div class="float"></div>
<div class="float"></div>
<div class="float"></div>
<script>
(function () {
document.onclick = function (event) {
event = event || window.event;
var target = event.target || event.srcElement,
active = this.querySelector('.size'),
elCls;
while (target != this) {
elCls = target.className;
elCls == 'float' && (target.className += ' size') ||
elCls == 'float size' && (target.className = 'float');
target = target.parentNode;
}
active && (active.className = 'float');
}
}());
</script>
</body>
http://learn.javascript.ru/play/YGn0Sb:dance: А код то становится все короче |
Derekovich, при клике по элементу чередование открытия закрытия - вне элемента все закрываются
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style>
.float{height: 20px;background: yellow;margin-bottom:10px;}
.size{height:100px}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
</script>
</head>
<body>
<div class="float"></div>
<div class="float"></div>
<div class="float"></div>
<script>
$('.float').click(function(event) {
event.stopPropagation();
$(this).toggleClass('size');
});
$(document).click(function(){
$('.float').removeClass('size');
});
</script>
</body>
</html>
|
Derekovich,
Вариант клик по другому элементу закрывает предыдущий - всё остальное как выше
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style>
.float{height: 20px;background: yellow;margin-bottom:10px;}
.size{height:100px}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
</script>
</head>
<body>
<div class="float"></div>
<div class="float"></div>
<div class="float"></div>
<script>
var floats = $('.float');
floats.click(function (event) {
event.stopPropagation();
floats.not(this).removeClass('size');
$(this).toggleClass('size');
});
$(document).click(function () {
floats.removeClass('size');
});</script>
</body>
</html>
|
Derekovich,
Ещё вариант варианта выше )))
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style>
.float{height: 20px;background: yellow;margin-bottom:10px;}
.size{height:100px}
</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
</script>
</head>
<body>
<div class="float"></div>
<div class="float"></div>
<div class="float"></div>
<script>
var floats = $('.float');
$(document).click(function (event) {
$('.size').not(event.target).removeClass('size');
$(event.target, floats).toggleClass('size');
});
</script>
</body>
</html>
|
В данном примере меняется только добавление/удаление единственного класса к элементу. А вот например как сделать, если есть 3 элемента с разными классами, и при клике должно также отображаться описание текста к картинке. Привожу пример самого блока:
<div class="section_1"> <div class="size_image"><img src="skin/frontend/default/il/images/img1.png" alt="" /></div> <div class="text_img1"> <p>TEXT only for img1</p> </div> </div> Таких картинок на странице 3 штуки, добавляю только в конце класса порядковый номер другой типа class="section_2", class="text_img2" и т.д. Возможно я неправильно сделал разметку, сейчас получается мне нужно для каждого клика необходимо писать обработчик клика, что не есть хорошо. Заранее благодарен! |
Цитата:
|
| Часовой пояс GMT +3, время: 23:09. |