Вот модель, использующая делегирование события и атрибут data для связывания большого пальца и основного изображения.
// This clears down any image showing already
const hideAll = () => document.querySelectorAll('#sliderImages div').forEach(d => d.classList.remove('active'));
// Show the actual image we want by adding a class
const showSlide = (id) => document.querySelector(`#sliderImages div[data-image-id="${id}"]`).classList.add('active');
// Event delegation model means we can add new thumbs and they will just work.
document.addEventListener('mouseover', (e) => {
if (e.target.matches('.thumbnail__img')) {
hideAll();
showSlide(e.target.dataset.imageId);
}
});
.slider__container {
font-weight: bold;
border: 1px solid red;
min-height: 150px;
}
.slider__img {
display: none;
}
.active {
display: block;
}
<div class="slider">
<div id="sliderImages" class="slider__container">
<div class="slider__img" data-image-id="1">Big image 1</div>
<div class="slider__img" data-image-id="2">Big image 2</div>
<div class="slider__img" data-image-id="3">Big image 3</div>
<div class="slider__img" data-image-id="4">Big image 4</div>
<div class="slider__img" data-image-id="5">Big image 5</div>
<div class="slider__img" data-image-id="6">Big image 6</div>
<div class="slider__img" data-image-id="7">Big image 7</div>
</div>
<div id="sliderNav" class="slider__navigation" data-relative-input="true">
<a href="#" class="thumbnail" data-depth="0.2">
<div class="thumbnail__img" data-image-id="1">Thumb 1</div>
</a>
<a href="#" class="thumbnail" data-depth="0.4">
<div class="thumbnail__img" data-image-id="2">Thumb 2</div>
</a>
<a href="#" class="thumbnail" data-depth="0.6">
<div class="thumbnail__img" data-image-id="3">Thumb 3</div>
</a>
<a href="#" class="thumbnail" data-depth="0.8">
<div class="thumbnail__img" data-image-id="4">Thumb 4</div>
</a>
<a href="#" class="thumbnail" data-depth="0.6">
<div class="thumbnail__img" data-image-id="5">Thumb 5</div>
</a>
<a href="#" class="thumbnail" data-depth="0.4">
<div class="thumbnail__img" data-image-id="6">Thumb 6</div>
</a>
<a href="#" class="thumbnail" data-depth="0.2">
<div class="thumbnail__img" data-image-id="7">Thumb 7</div>
</a>
</div>
</div>
Вы не можете установить макс. размер "кучи" в.Net, если Вы не размещаете CLR сами в процессе.
Редактирование: Для управления выделениями памяти CLR включая макс. размер "кучи" необходимо использовать API хостинга, чтобы разместить сброс и конкретно использовать "Интерфейсы диспетчера памяти", некоторая информация о начинающем может быть найдена здесь MSDN Magazine, столбец CLR Inside Out: API Хостинга CLR
Редактирование: для ответа Вы подвергаете сомнению, почему был бы Вы хотеть управлять выделением памяти или специфически макс. размером "кучи", Вы обычно не хотите, но , если Вы пишете приложение, которое похоже на SQL Server или IIS или некоторое приложение реального времени тогда, у Вас было бы довольно серьезное основание управлять памятью, и конкретно избежать подкачки страниц, иначе сам CLR и ОС уже делают довольно хорошее задание для Вас, и что оставляют, должен гарантировать Ваш, что приложение использует минимальные ресурсы для вещей работать хорошо.
Нет, это не применяется в.NET. "Куча" действительно продолжает расти, пока это не может больше расти. (Очевидно, это "после пытается восстановить память через GC, вырастить "кучу"".) В основном нет почти такой же настройки, доступной в GC.NET как в Java. Можно выбрать GC сервера или клиент один, и я думаю, что существует опция для превращения включения - выключения параллельный GC (я найду ссылки через минуту), но это - в основном он.
РЕДАКТИРОВАНИЕ: кажется, что существует немного больше к нему, хотя не огромная сумма. запись в блоге Rick Minerich на настройках и GC последующая , кажется, знает скорее больше, чем я делаю о вопросе. Они - вероятно, хорошая начальная точка для дальнейшего расследования - но они - главным образом флаги, а не вид пределов памяти, доступных в JVMs.
РЕДАКТИРОВАНИЕ: ответ Поп поднимает положительный вопрос - я принимал "нормальную" модель хостинга CLR (т.е. не под Вашим управлением). Если Вы захотите перейти к усилию по хостингу его сами, Вы, вероятно, получите намного больше контроля - за счет дополнительной работы хостинга его. Я не могу сказать, что когда-либо изучал ту сторону вещей.
Вы могли бы хотеть посмотреть Система. Время выполнения. MemoryFailPoint.
Насколько я понял, не существует простого способа контролировать размер кучи приложения .Net с помощью среды CLR.
Ссылка выше отвечает на вопрос только наполовину. Когда я исследовал эту же проблему, я получил ответ: «Куча растет, чтобы использовать всю доступную память», как будто это единственная причина, по которой вы хотите контролировать максимальный размер кучи.
В (обычно Java) серверных средах , вы не хотите, чтобы плохо работающее приложение занимало память за счет других размещенных приложений. Простое решение - ограничить объем памяти, который приложение может использовать для своей кучи. Это достигается с помощью аргумента Java -Xmx, поэтому вы можете гарантировать, что приложение не будет использовать больше запланированного, например -Xmx256M. Поскольку выделение памяти в куче во время инициализации может замедлить запуск приложений, Java использует аргумент -Xms, чтобы позволить приложениям, которые создают большое количество объектов во время инициализации, начинать с большого блока кучи вместо того, чтобы JVM постоянно изменяла размер кучи по ходу работы.
CLR .Net не имеет такой возможности. Я подозреваю, что это потому, что .Net CLR не является виртуальной машиной. CLR - это API (довольно всеобъемлющий, я могу добавить), который служит адаптером для собственных .dll, что приравнивается к подходу, который больше похож на исполняемый файл, когда дело доходит до управления памятью.
Я задал этот вопрос о разработке SharePoint и слышали, что можно управлять размером кучи с помощью модулей IIS, называемых веб-приложениями, с помощью которых вы можете указать IIS ограничить память данного веб-приложения. Интересно, связано ли это с тем, что IIS имеет настроенные процедуры, которые заменяют / переопределяют new () / malloc () / etc и, таким образом, могут предоставлять этот тип управления клиентским приложениям. Это означает, что автономным приложениям .Net не повезло, если вы не хотите написать собственный диспетчер памяти на C ++ и создать интерфейс для .Net