druggble последовательность отработки событий в разных браузерах
Доброго всем времени суток!
Имеется небольшой модуль для сайта, в котором есть блоки с иформацией. Эти блоки находятся в свёрнутом состоянии и разворачиваться должны по клику. Так же эти же блоки должны перетаскиваться по странице. код инициализации всего этого выглядит так:
blocks.bind('click', catchBlock);
blocks.not('.nondruggble').draggable({stop : LetGo, start : startMove});
Проблема в том, что с точки зрения браузера перетаскивание - это просто очень длинный клик и поэтому после перетаскивания событие клика тоже срабатывает, поэтому я сделал так
var startMove = function(e) {
var t = $(this);
t.css({'z-index' : 1000});
t.unbind('click');
}
var LetGo = function(event, ui) {
var t = $(this);
t.css({'z-index' : ''});
t.bind('click', catchBlock);
}
Но тут в силу вступает разность браузеров. Проверено было на хроме и мазиле. На хроме такой финт ушами сработал корректно, а мазиле же при таком раскладе блоки всё равно разворачиваются после того, как к ним вновь назначается отработка события клика. Что мне кажется странным, но пока не понимаю, как это решить. Буду очень признателен за совет! |
открывашка 223 зависимая + перемещение блоков
NapalmRain,
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> - jsFiddle demo</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<style type='text/css'>
.block1, .block3 {
position: relative;
width: 500px;
height: 50px;
background: blue;
}
.block2 {
position: relative;
width: 500px;
height: 125px;
background: #fff;
padding: 25px;
transition: all 0.5s ease;
}
.block2 > div {
float: left;
width: 250px;
}
.elem {
position: relative;
margin-bottom: 20px;
width: 200px;
}
.head {
width: 100%;
height: 30px;
text-align: center;
line-height: 30px;
background: green;
color: #fff;
font-weight: 700;
cursor: pointer;
}
.hide {
border-top: none!important;
border: 1px solid #bbb;
padding: 10px;
}
</style>
<script>
$(function() {
var $h = $(".hide"),
$a = $(".head"),
$b = $(".block2");
$h.each(function(indx, el) {
el = $(el);
var contHeight = el.height(),
head = $a.eq(indx);
el.hide();
head.on("click", function(event) {
if($(this).parents(".dragg").length) return;
event.preventDefault();
$h.stop(true,true).not(el.slideToggle(800)).slideUp(800);
$a.not(head.toggleClass("open")).removeClass("open");
$b.height(125 + head.is(".open") * contHeight)
})
})
$(".elem").draggable({delay:100 ,stop : function() {
window.setTimeout(function() {
$(".elem").removeClass("dragg")
},10)
}, start : function() {
$(this).addClass("dragg")
}})
});
</script>
</head>
<body>
<div class="block1"></div>
<div class="block2">
<div class="left">
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Длинный спрятанный контент</div>
</div>
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Очень-очень длинный трудночитаемый спрятанный контент</div>
</div>
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Спрятанный контент</div>
</div>
</div>
<div class="right">
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Спрятанный контент</div>
</div>
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Спрятанный контент</div>
</div>
<div class="elem">
<div class="head">Клик</div>
<div class="hide">Спрятанный контент</div>
</div>
</div>
</div>
<div class="block3"></div>
</body>
</html>
|
рони,
Благодарю! timeout в событии стоп спас. |
| Часовой пояс GMT +3, время: 19:19. |