Jay Nanavaty
Jay Nanavaty

Reputation: 1129

jQuery div expand/collapse

Have a look at following sample:

http://jsfiddle.net/EWJGJ/13/

I want to customize this sample such a way that:

  1. Expand of give div should happen over click and not mouse hover. Currently it is on mouse hover.

  2. The clicked div should expand on all of the div. That is, in the link above, there are 9 divs. If I click on any of the div, it should expand over all of the divs.

  3. The behavior should be toggle. If I again click on expanded div, it should shrink to its original position and making others div visible.

Any sample code or link will be really helpful. I am basically trying to create Windows 8 style tile based interface having such behavior.

Code

HTML:

<table cellpadding="0" cellspacing="0" border="0" class="tabellainizio" align="center">
  <tr>
    <td><table cellpadding="0" cellspacing="1" border="0">
      <tr>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
      </tr>
      <tr>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
      </tr>
      <tr>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
        <td class="bordini">
        <div class="principale">
            <div class="contenitore">
                <div class="immagine">[immagine]</div>
                <div class="content">"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
            </div>
        </div>
        </td>
      </tr>
    </table></td>
  </tr>
</table>   

Javascript:

    $(window).load(function(){
$('.contenitore').hover(function() {
    $(this).animate({
        width: 300,
        height: 400,
        top: -80,
        left: -45
    }, 'fast');
    $(this).animate().css('box-shadow', '0 0 5px #000');
    $(this).css({
        zIndex: 100 
    });
}, function() {
    $(this).animate().css('box-shadow', 'none')
    $(this).animate({
        width: 210,
        height: 240,
        top: 0,
        left: 0
    }, 'fast');
    $(this).css({
        zIndex: 1
    });
});
});

CSS:

.tabellainizio {
    margin-top:100px;
}
.bordini {
    border: 1px #DDD solid;
}
.principale {
    height: 240px;
    width: 210px;
    position: relative;
}
.principale .contenitore {
    background-color: #fff;
    height: 240px;
    width: 210px;
    position: absolute;
    display: block;
    top: 0;
    left: 0;
}
.immagine {
    border: 1px solid maroon;
    margin: 15px auto;
    height: 168px;
    width: 168px;
    position:relative;
}
.content {
    display: none;
    margin: 15px;
}
.contenitore:hover {

}
.contenitore:hover .content {
    display: block;
}
.contenitore:hover .immagine {
    position:relative;
}

Upvotes: 2

Views: 212

Answers (1)

razz
razz

Reputation: 10110

Replace hover with toggle, get the index of the clicked element parents td -> for column number and tr -> for row number, move clicked element to the top left corner:

$(window).load(function () {
    $('.contenitore').toggle(function () {

        $(this).css({
            'box-shadow': '0 0 5px #000',
            zIndex: 100
        }).animate({
            width: 212 * 3,
            height: 242 * 3,
            top: 0 - ($(this).parents('tr').index() * 242),
            left: 0 - ($(this).parents('td').index() * 212)
        }, 'fast');
    }, function () {

        $(this).animate({
            width: 210,
            height: 240,
            top: 0,
            left: 0
        }, 'fast', function () {
            $(this).css({
                zIndex: 1,
                'box-shadow': 'none'
            });
        });
    });
});

jsfiddle

Upvotes: 1

Related Questions