저는 Masonry의 확장 된 사용을 시도했습니다. 사용자가 상자 (div) 위로 마우스를 가져 가서 해당 div를 2 초 동안 기다리면 스크립트가 div를 확장하는 함수를 호출해야한다는 아이디어가 있습니다.jQuery settimeout()이 올바르게 작동하지 않습니다.
스크립트는 2 초 동안 기다리지 않고 즉시 작동하지만 모든 기능이 즉시 실행됩니다. setTimeOut() 함수에 대한 자세한 정보를 찾았습니다. 그러나 나는 그것을 올바르게 구현했다고 믿는다. 누군가 나를 도울 수 있습니까?
HTML :
<!DOCTYPE html>
<html class=''>
<head>
<meta charset='UTF-8'>
<meta name="robots" content="noindex">
<link rel="stylesheet" type="text/css" href="responsive_masonry.css" />
<!-- <link rel="stylesheet" type="text/css" href="fluid_responsive_masonry.css" /> -->
</head>
<body>
<h1>Masonry - animate item size with jQuery</h1>
<div class="masonry">
<!-- <div class="grid-sizer"></div> -->
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
<div class="item">
<div class="item-content"></div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src='http://masonry.desandro.com/masonry.pkgd.js'></script>
<script src="new_layout.js"></script>
<!-- <script src="layout.js"></script> -->
</body>
</html>
JS :
var timer = 0;
var delay = 2000;
var $container = $('.masonry').masonry({
columnWidth: 60
});
$(function() {
$container.on('mouseenter', '.item-content', function() {
timer = setTimeout(ToggleExpansion($(this)), delay);
});
$container.on('mouseleave', '.item-content', function() {
clearTimeout(timer);
});
$container.on('click', '.item-content', function() {
if ($(this).parent('.item').hasClass('is-expanded')) {
ToggleExpansion ($(this));
}
else {
$container.children().removeClass('is-expanded');
ToggleExpansion ($(this));
}
});
});
function ToggleExpansion (thisObj) {
if (!$(this).parent('.item').hasClass('is-expanded')) {
$container.children().removeClass('is-expanded');
thisObj.parent('.item').toggleClass('is-expanded');
}
$container.masonry();
}
CSS :
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
body {
font-family: sans-serif;
}
.masonry {
background: #EEE;
max-width: 640px;
}
.masonry .item {
float: left;
}
/* item is invisible, but used for layout */
.item,
.item-content,
.grid-sizer {
width: 60px;
height: 60px;
}
.item {
border: none;
background: transparent;
}
/* item-content is visible, and transitions size */
.item-content {
width: 60px;
height: 60px;
background: #D26;
border: 2px solid #333;
border-color: hsla(0, 0%, 0%, 0.5);
border-radius: 5px;
-webkit-transition: width 0.4s, height 0.4s;
-moz-transition: width 0.4s, height 0.4s;
-o-transition: width 0.4s, height 0.4s;
transition: width 0.4s, height 0.4s;
}
.item:hover .item-content {
border-color: white;
background: #A2C;
cursor: pointer;
}
/* both item and item content change size */
.item.is-expanded,
.item.is-expanded .item-content{
width: 180px;
height: 120px;
}
.item.is-expanded {
z-index: 2;
}
.item.is-expanded .item-content {
background: #F90;
}
* "setTimeout'은 jQuery 일이 아닙니다. 그것은 브라우저의 것입니다. –