javascript - 使用多个 div 元素时创建增长/收缩计时器会中断

标签 javascript jquery arrays setinterval

我最近一直在玩 JavaScript 和 jQuery,我决定让 div 在鼠标进入 div 区域时变大,并在鼠标离开时缩小。当我只有一个 div 或一次只运行一个 div 时,它工作得很好,但如果我要离开一个区域,并在另一个区域完成收缩之前进入另一个区域,它就会崩溃。

这是我正在使用的 JS 和 jQuery 代码:

var timers = [];
var maxSize = 150;
var minSize = 100;
var step = 1;

function grow(element) {
    var size = element.width();
    if (size < maxSize) {
        var newSize = size + step;
        if (newSize > maxSize) newSize = maxSize;
        element.css('width', newSize);
        element.css('height', newSize);
    } else {
        window.clearInterval(timers[element]);
    }
}

function shrink(element) {
    var size = element.width();
    if (size > minSize) {
        var newSize = size - step;
        if (newSize < minSize) newSize = minSize;
        element.css('width', newSize);
        element.css('height', newSize);
    } else {
        window.clearInterval(timers[element]);
    }
}

function inArray(element, array) {
    if ($.inArray(element, array) > 1) return true;
    return false;
}

$("div").mouseover(function() {
    var element = $(this);
    if (inArray(element, timers)) window.clearInterval(timers[element]);
    else timers.push(element);

    timers[element] = window.setInterval(function() {
        grow(element);
    }, 0);
});

$("div").mouseleave(function() {
    var element = $(this);
    window.clearInterval(timers[element]);
    timers[element] = window.setInterval(function() {
        shrink(element);
    }, 0);
});

由于我已将元素放入数组中,因此它们不应该出现同时调整多个 div 大小的问题,而且我不确定我做错了什么。 (And here's a JSFiddle of it)

最佳答案

也许您只是在玩 JavaScript。但仅供记录,您可以通过几行 css 而不使用 javascript 来实现这一点:

div {
    width: 100px;
    height: 100px;
    border: 1px solid #000;
    transition: .5s;
}
div:hover {
    width:150px;
    height:150px;
}
<div></div>
<div></div>
<div></div>

关于javascript - 使用多个 div 元素时创建增长/收缩计时器会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678274/

相关文章:

javascript - 根据相同的 JSON 键值获取值

javascript - 从字符串中提取 URL javascript

javascript - 页面呈现时显示无失败

javascript - Tablesorter:仅允许外部过滤器搜索子行

javascript - 如何获取没有对象编号的 json 对象?

jQuery 循环似乎正在调整我的元素的高度

javascript - 防止在隐藏和显示时推送元素 - jQuery

php - 使用 php 从查询 mysql 创建姓名和电子邮件

python - 如何检查数组中每一项的首字母?

arrays - 查询嵌套文档 mongoDB