2013-09-24 3 views
0

В моем коде у меня есть 4 divs, выровненных внутри.Изменение размера Div динамически

То, что я хочу, при нажатии любого div, он изменяет размер, чтобы заполнить пространство всех 4 divs (width: 1000px) и скрывает остальные div.

И при возврате div, он изменит размер до исходных размеров.

Это то, что я сделал до сих пор.

<div class="gallery-image-replenish" id="bloc2" onclick="document.getElementById('bloc2').style.width = '980px'"> </div>

В настоящее время, по щелчку это изменение размера DIV ниже других дивы. Я знаю, что есть метод скрыть другие div, но я не знаю, как это сделать.

+0

Ой ... Я был бы соблазн использовать рамки как JQuery, чтобы помочь вашему мозгу быть меньше больно делать что-то вроде этого ... –

+0

CSS-за DIV является ' .gallery-image-replenish { \t background: url ('../ images/thumbs/Replenish.jpg'); \t высота: 600px; \t ширина: 246px; \t float: слева; \t margin-left: 3px; \t/* display: inline-block; */ \t text-align: center; ' и разметка div как указано выше – Newtt

ответ

1

Можно ли использовать jQuery (jquery.com) в вашем проекте?

Потому что это сэкономит много кода (и сделает его более читаемым!). Это будет выглядеть следующим образом (не проверял, но, вероятно, работает: P):

<div id="bloc1" class="gallery-image-replenish">1</div> 
<div id="bloc2" class="gallery-image-replenish">2</div> 
<div id="bloc3" class="gallery-image-replenish">3</div> 
<div id="bloc4" class="gallery-image-replenish">4</div> 

<script> 
    jQuery(document).ready(function(){ 
     var galleryElements = $('.gallery-image-replenish'); 
     galleryElements.click(function(){ 
     var clickedElement = $(this); 
     if (clickedElement.hasClass('expanded')) { // if it has the class expanded, remove it (and show other elements again) 
      clickedElement.removeClass('expanded'); 
      galleryElements.show(); 
     } else { // if it has not got the expanded css class hide other and add class to expanded 
      galleryElements.not(clickedElement).hide(); // hide every other div 
      $(this).addClass('expanded'); // add stylesheet class for the new bigger width 
     } 
     }); 
    }); 
</script> 
0

Чистый Javascript способ скрыть элемент является:

document.getElementById('otherdiv1').style.display = 'none'; 
0

Ниже приводится решение, которое использует общую яваскрипт функцию, чтобы выполнять то, что вы хотите: -

<div class="gallery-image-replenish" id="bloc1" onclick="manageDivs(this.id)"> </div> 
<div class="gallery-image-replenish" id="bloc2" onclick="manageDivs(this.id)"> </div> 
<div class="gallery-image-replenish" id="bloc3" onclick="manageDivs(this.id)"> </div> 

<div class="gallery-image-replenish" id="bloc4" onclick="manageDivs(this.id)"> </div> 


<script type="text/javascript"> 

    function manageDivs(divId) 
    { 
    document.getElementById(divId).style.width = '980px'"; 
    //to hide rest of the divs 
    for(i=1;i<=4;i++) 
    { 
     if(divId!='bloc'+i) 
      document.getElementById('bloc'+i).style.display = 'none'; 

    } 
    } 
</script> 
+0

Это работает при изменении размера div. Как насчет второго щелчка, он изменяет размер до оригинала? Вот где я сталкиваюсь с моим главным препятствием. Это изменение размера оригинала. – Newtt

2

С такой HTML:

<div class="gallery-image-replenish" id="bloc1"></div> 
<div class="gallery-image-replenish" id="bloc2"></div> 
<div class="gallery-image-replenish" id="bloc3"></div> 
<div class="gallery-image-replenish" id="bloc4"></div> 

вы можете использовать этот вид JS:

var handler = function(e){ 
    e.target.style.width = "1000px"; 
    for (j = divs.length; j--;) { 
     if (divs[j].id != e.target.id) { 
      divs[j].style.display = "none"; 
     } 
    } 
} 

var divs = document.getElementsByClassName('gallery-image-replenish'); //array of divs 
var div; 

for (i = divs.length; i--;) { 
    div = divs[i]; 
    div.addEventListener('click', handler); 
} 
+0

Мне нравится это решение для чистого Javascript-метода для выполнения вещей ... Есть ли ошибка в вашем цикле 'for', кстати? –

+1

Нет, нет. 'i -' возвращает уменьшающееся число, которое начинается с длины массива. Когда 'i' достигает нуля, значение boolean этого значения становится ложным. – Oshibka404

+1

Ничего себе, интересно! Я что-то узнал! Спасибо за отзыв @ Oshibka404 :) –

0

This является простым примером,

var activ = false; 
$('.aligned').live('click',function(){ 
    if(!$(this).hasClass('actif')) { 

     $('.aligned').css('width','0'); 
     $('.aligned').removeClass('actif'); 

     $(this).css('width','1000px'); 
     $(this).addClass('actif'); 

    } else { 
     $('.aligned').css('width','250px'); 
    } 

}); 

вы можете использовать jQuery animate для более визуального эффекта

Смежные вопросы