Как я могу динамически изменять размеры элементов и родственных элементов с помощью jQuery?

#jquery #dynamic #resize

#jquery #динамический #изменение размера

Вопрос:

Если вы посмотрите на emmawatson.com или ted.com , вы заметите, что существует несколько панелей, или разделов, размер которых изменяется при наведении курсора мыши.

В emmawatson.com , они фактически заставляют другие divs динамически изменять размер в зависимости от наведения курсора мыши на div.

Я хотел бы создать аналогичный эффект, используя щелчок, для divs в пределах определенной границы.

Как это можно сделать?

Псевдокод выглядит следующим образом:

 $(div*containing"input").function()
div*containing"input".resize(when input element is active)
otherDivs.move(get out of the way so this div can expand)
$(xButton).click(bring things back to their original size)
 

Не смейтесь над моим псевдокодом. Я новичок в этом. : P

http://jsfiddle.net/JVtyv/9/

Комментарии:

1. я не вижу его на ted.com и emmawatson.com это вспышка… у вас есть другой пример?

2. В основном вам нужен оптимизатор с плавающей запятой, такой как isotope, или использование абсолютных позиционированных divs, чтобы это происходило без подслушивания. Более простой подход был бы чем-то вроде papermashup.com/demos/jquery-feature

3. @TimJoyce Я хочу, чтобы этот эффект вспышки использовался с помощью решения jQuery. И я в порядке с созданием эффекта, подобного TED, при котором div расширяется, а остальные сохраняют те же размеры, но с меньшей непрозрачностью. Я собираюсь сделать это функцией onClick. При щелчке на одном из входных элементов div, содержащий его, изменит размер.

4. @MarcoJohannesen это упрощенная версия того, что я хочу сделать. Если вы учитываете тот факт, что divs не имеют одинаковых размеров, и есть divs ниже, слева, справа и над определенными элементами, размер которых должен быть изменен соответствующим образом, это становится намного сложнее.

Ответ №1:

Вы обязательно должны посмотреть на jquery isotope http://isotope.metafizzy.co/demos/relayout.html . Этот плагин пересчитывает макет элемента при изменении размера элемента в выделении, а также делает многие другие решения для компоновки элементов элегантно простыми.

Он должен делать именно то, что вам нужно.

Комментарии:

1. Да, да, да!! Это именно то, что я ищу! Теперь мне просто нужно выяснить, как на самом деле использовать его и применить к моему дизайну. Большое вам спасибо! Если у вас будет такая возможность, пожалуйста, предложите некоторые рекомендации по фактическому включению в мой собственный дизайн. Еще раз, спасибо миллион!

Ответ №2:

Для этого вы можете использовать hover() метод в jQuery.

Метод наведения работает следующим образом: наведите курсор (поверх, вне); вставьте функции, которые вы хотите выполнить для «over» и «out», и все готово.

Итак, если вы хотите изменить размер изображений внутри div, как на emmawatson.com вы могли бы сделать что-то вроде следующего, используя методы наведения и css:

  $(function(){
$("div").hover(function(){
    $("div img").css({"height":"150%" , "width":"auto"}); //auto scales the width according to the image height
    },
    function(){
        $("div img").css({"height":"auto" , "width":"auto"}); //auto resizes image back to default dimensions
        });
});
 

Просто используйте какой-нибудь CSS, например overflow:hidden; , чтобы обрезать изображение внутри div, и все готово.

Кроме того, обязательно ознакомьтесь с документацией jQuery. Это творит чудеса!

Комментарии:

1. Мой ответ аналогичен тому, что делается на страницах, отличных от flash emmawatson.com . Домашняя страница этого веб-сайта использует flash.

2. Я понимаю, что могу изменить размер одного элемента, используя эффект наведения и некоторые базовые css, но проблема в том, что я бы хотел создать функцию для divA для изменения размера до определенной ширины onClick и изменения размеров divB, divC, divD, divE и divE. Затем я бы написал другую функцию для изменения размера divB onClick и изменения размеров divA и т. Д. Это непрактично писать длинную функцию для каждого отдельного div. Проверьте ссылку на скрипку, и вы увидите непрактичность этого метода, если я не неправильно понимаю. Спасибо! 🙂