ОК, потребовалось определенное время, но за счет сочетания предложенные предложения и дополнительный поиск нашли решение для моих нужд.
Каждый из предложений дал мне до сих пор, но были некоторые проблемы для конкретной функциональности, в которой я нуждался, поэтому размещаю это на случай, если это поможет другим.
Я использую < SVG> элемент:
Я обязательно основное изображение, и их некоторые небольшие изображения сверху, которые меняют цвет, если изображение просматривалось, или если кнопка вне основного изображения щелкнул.
<div style="position: absolute; top: 0px; left: 0px;"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="0px" height="0px"><defs><filter id="desaturate"> <feColorMatrix
type="matrix"
values="0.5 0 0 0 0
0.2 0 0 0 0
0.9 0 0 0 0
0 0 0 1 0" /></filter></defs></svg></div>
Значения устанавливают изменение цвета. Это пробная версия и ошибка, поскольку я еще не нашел хорошего руководства по цветам, но их достаточно, чтобы пройти.
У меня была проблема со случайными пробелами и позиционированием, вызванная использованием элемента svg <. Поэтому я положил его внутрь погружения, которое абсолютно позиционируется и устанавливает размер элемента в «0» 0, поэтому он не занимает места и не влияет ни на что другое на странице.
Идентификатор определяет этот цвет. Вы можете применить это изменение цвета на стольких же изображения, как вам нравится следующим образом:
<div style="position: relative; top: 000px; left: 000px; z-index: 1; display: inline;">
<svg class="svgClass" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="450px" height="900px">
<image xlink:href="main_image.png" width="450" height="900" />
<image xlink:href="small_image1.png" class="ChangeImageColour ChangeImageColourClick" width="79" height="198" x="110px" y="100px" />
<image xlink:href="small_image2.png" class="ChangeImageColour ChangeImageColourClick" width="79" height="198" x="150px" y="130px" /></svg></div>
Опять же, чтобы избежать проблем с позицией и распорными с SVG, я установил размер < SVG> элемент для изображений в одинаковый размер основного изображения, и разместил их все в пределах < div>, которые затем могут быть расположены в нужном месте на странице. Если вы хотите, чтобы изображения перекрывались таким образом, вам нужно будет иметь все изображения в одном и том же элементе < svg>, или вы можете столкнуться с проблемами отображения и интервалов в некоторых браузерах.
Вы можете позиционировать каждое изображение отдельно над верхней частью основного изображения с помощью «x» и «y». Вы также должны указать высоту и ширину изображения.
После того, как у вас есть < SVG>, чтобы определить цвет, и ваш элемент < SVG> для изображений, теперь просто нужно применить этот цвет к изображениям, которые вы хотите с помощью атрибутов классов и идентификаторы и следующий код:
<script>
var $shape = $('.ChangeImageColour');
$('.ChangeImageColourClick').click(function() {
if ($shape.attr('filter'))
$shape.removeAttr('filter');
else
$shape.attr('filter', 'url(#desaturate)');
});
</script>
Я хочу, чтобы изменение цвета происходило после эфира щелчка на изображении или с помощью кнопки. Просто создайте кнопку с соответствующими «щелчками» calss, в данном случае «ChangeImageColourClick». Таким образом, вы можете создавать все, что нужно щелкнуть, и изменить цвет. Этот клик добавляет идентификатор установленного цвета для изменения (#desaturate). Если какой-либо соответствующий элемент уже имеет идентификатор, он удаляется.
Это создает эффект переключения цвета. Он изменит цвет любого совпадающего изображения того же класса.
Вы можете, конечно, не использовать событие щелчка, если не требуется, или начать с изменением цвета «на» и нажмите кнопку для удаления и т.д.
Примечания: Вы можете иметь несколько < SVG> элементы с изображениями в и применить одно и то же изменение цвета. Просто убедитесь, что вы устанавливаете размеры элемента < svg> для тех, которые вы хотите, даже если это 0. Если вы оставите его пустым, вы получите некоторые проблемы с интервалом.
Мне нужно иметь изображения в том же < svg>, поскольку они представляют собой изображения png, которые занимают одно и то же место на странице. Если ваши изображения не перекрываются, вы должны использовать отдельные элементы < svg> или каждый набор изображений или изображений и задавать размеры элемента < svg> размеру этого изображения, и у вас не должно быть проблем с нечетным интервалом и позиционированием в некоторых браузерах.
Я думаю, что об этом объясняется все.
Он работает очень хорошо для того, что мне нужно, и представляет собой довольно краткий код кодирования, тем более, что вам нужно только установить цвет один раз и применить к нескольким изображениям.
Просто будьте осторожны с некоторыми примечаниями, которые я поставил, чтобы убедиться, что они отображаются по мере необходимости.
Спасибо за помощь, обновите, если есть что-то, что нужно добавить.
Если у вас возникли проблемы, отправьте сообщение здесь. Я не эксперт, но посмотрел на это сейчас честно и, вероятно, пробовал и тестировал большинство подводных камней.
Какой браузер вы используете? 'document.getElementsByClassName (" mug ")' должен возвращать массив вместо одного объекта – Deepak
Работает для меня: с ID: http://jsfiddle.net/d6fmjady/ и с 'getElementsByClassName': http://jsfiddle.net/d6fmjady/1/ – pawel
Спасибо, Пауэл, в конце пропало все важные [0]. Однако это возвращает только первое изображение, как и предполагалось. Переход на [1] только на второе изображение и т. Д. Я посмотрел и увидел, что мне нужно запустить что-то по строкам: var i; для (i = 0; i