单击时调整大小并返回到原始位置

Resizing on click and returning to original position

本文关键字:返回 原始 位置 调整 单击      更新时间:2023-09-26

>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);       
    });   
}

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

这是修复它的一种方法:

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,所以我在 CSS 规则中添加了position: relative

更简单的解决方案:

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 中。