2

http://jsfiddle.net/fFs4B/

这把我逼到了墙角。我希望任何div被点击的东西都扩大到容器大小,然后再缩小到大小。最后一部分让我尖叫亵渎。帮助?

var margLeft = '0%';
var margTop = '0%';

JS:

$(document).ready(function() {    
    $('.container div').click(function() {        
        if ($(this).hasClass('wide')) {
            margLeft = '0%';
            margTop = '0%';

            var clickedElem = $(this);
            clickedElem.removeClass('wide');
            deflateThis(clickedElem);
        }
        else {
            var clickedElem = $(this);
            inflateThis(clickedElem);
        }
    });
});

function inflateThis(clickedElem) {
    clickedElem.siblings().fadeOut(500, function() {   
        $('p').append(clickedElem.css('left'));
        if (clickedElem.css('left') !== '0%') {
            margLeft = '-50%';   
        }
        if (clickedElem.css('top') !== '0%') {
            margTop = '-50%';
        }
        clickedElem.animate({
            'left': '0',
            'top': '0',
            'width': '100%',
            'height': '100%'
        }, function() {
            clickedElem.addClass('wide');               
        });
    });   
}

function deflateThis(clickedElem) {
    if (margLeft == '0%') {
        margLeft = '0%';
    }
    else {
        margLeft = '50%';
    }
    if (margTop == '0%') {
        margTop = '0%';
    }
    else {
        margTop = '50%';
    }
    clickedElem.animate({
        'left': margLeft,
        'top': margTop,
        'width': '50%',
        'height': '50%'
    }, function() {
        clickedElem.siblings().fadeIn(500);       
    });   
}
4

2 回答 2

1

更简单的解决方案:

http://jsfiddle.net/fFs4B/5/

$('.container div').click(function() { 
    $('.container div').toggleClass('hide'); //hides all divs
    $(this).toggleClass('hide'); //unhide this div
    $(this).toggleClass('wide'); //wide this div
});

将样式保留在 Css 中。

于 2013-09-16T17:03:03.603 回答
1

问题与跟踪左侧和顶部偏移值有关。

这是修复它的一种方法:

var margLeft = '';
var margTop = '';

$(document).ready(function() {    
    $('.container div').click(function() {        
        if ($(this).hasClass('wide')) {
            var clickedElem = $(this);
            clickedElem.removeClass('wide');
            deflateThis(clickedElem);
        }
        else {
            var clickedElem = $(this);
            inflateThis(clickedElem);
        }
    });
});

function inflateThis(clickedElem) {
    margLeft = clickedElem.css('left');
    margTop = clickedElem.css('top');
    clickedElem.siblings().fadeOut(500, function() {   
        clickedElem.animate({
            'left': '0px',
            'top': '0px',
            'width': '100%',
            'height': '100%'
        }, function() {
            clickedElem.addClass('wide');               
        });
    });   
}

function deflateThis(clickedElem) {
    clickedElem.animate({
        'left': margLeft,
        'top': margTop,
        'width': '50%',
        'height': '50%'
    }, function() {
        clickedElem.removeClass('wide'); 
        clickedElem.siblings().fadeIn(500);       
    });   
}

膨胀元素时,将左侧和顶部偏移保存在原生像素值中。

当你放气时,从全局变量中恢复它们,并.wide从放气的元素中删除类。

参见演示:http: //jsfiddle.net/audetwebdesign/yhDjt/

评论

我认为您的意思是颜色面板的大小和位置相对于.container,所以我添加position: relative到 CSS 规则中。

于 2013-09-16T17:39:15.233 回答