Вход

Просмотр полной версии : Как изменить значение data-атрибута?


arkadii_parovozov
01.06.2017, 15:44
Знаю, эта тема уже обсуждалась на этом форуме, но у меня ничего не получается.

В индексной странице загружается див с атрибутом data-image-src<div class="parallax" id="id1" data-speed="0.5" data-image-src="./images/slide-1.jpg" ></div>

При помощи js хочу заменить это изображение на другоеvar new_img= document.getElementById("id1");

new_img.setAttribute("data-image-src", "./images/slide-2.jpg");

Если проверяю алертом, то получаю новое значение атрибута (slide-2.jpg) но сама картинка на странице не меняется. Почему так происходит?

рони
01.06.2017, 16:03
arkadii_parovozov,
... наверно потому, что плагину уже до фонаря на ваши манипуляции

j0hnik
01.06.2017, 16:08
arkadii_parovozov,
... наверно потому, что плагину уже до фонаря на ваши манипуляции
Он говорит скрипт плагина инициализируйте после замены!

arkadii_parovozov
02.06.2017, 21:22
Не могу понять как запустить скрипт плагина(файл во вложении).

Сам плагин подключается к странице <script src="./js/parallax.min.js"></script>

после чего по клику идет замена фонового изображенияvar new_img= document.getElementById("id1");

new_img.setAttribute("data-image-src", "./images/slide-2.jpg");

но ничего не получается. Пробовал даже выводить два блока с отдельными значениями data-image-src<div class="parallax" id="id1" data-speed="0.5" data-image-src="./images/slide-1.jpg" ></div>
<div class="parallax" id="id1" data-speed="0.5" data-image-src="./images/slide-2.jpg" ></div>
и по клику менять свойства display с none на block и обратно, но тоже ничего не выходит, блоки меняются а картинка нет. Не могу понять в чем дело...

рони
02.06.2017, 21:28
Пробовал даже выводить два блока
id уникально!!!
Не могу понять в чем дело... вам пробовали это обьяснить выше.

arkadii_parovozov
02.06.2017, 22:04
id уникально!!!
вам пробовали это обьяснить выше.

id уникально, там id2

скрипт плагина инициализируйте после замены - как инициализировать такую конструкцию !function(t,i,e,s){
function o(i,e){
var h=this;"object"==typeof e&&(delete e.refresh,delete e.r .......
?

И почему элемент удаляется при display none а его изображение перекидывается на следующий элемент, если плагину уже пофиг на все манипуляции?

рони
02.06.2017, 22:12
arkadii_parovozov,
вы бы хоть ссылку дали плагин и обьснили что хотите сделать?
как инициализировать такую конструкцию никак, потому что по клику вы меняите html, а не данные в плагине (плагин всё что ему нужно собрал после своей загрузки) , если у него есть api, то что то можно изменить через него.

arkadii_parovozov
03.06.2017, 10:38
Плагин брал этот: http://pixelcog.github.io/parallax.js/

Но первый блок хочу сделать в виде слайдера, как здесь: https://livedemo00.template-help.com/joomla_51191/

никак, потому что по клику вы меняите html, а не данные в плагине (плагин всё что ему нужно собрал после своей загрузки) - так если он больше не работает после загрузки, то почему при смене свойства display с none на block и обратно при помощи js $("#id1").css("display","none");
$("#id2").css("display","block"); текст внутри блока меняется а картинка нет?
<div class="parallax" id="id1" data-speed="0.5" data-image-src="./images/slide-1.jpg" >Текст 1</div>
<div class="parallax" id="id2" data-speed="0.5" data-image-src="./images/slide-2.jpg" >Текст 2</div>

рони
03.06.2017, 11:44
var new_img= document.getElementById("id1"); new_img.setAttribute("data-image-src", "./images/slide-2.jpg");
вместо этого попробуйте
$('#id1').parallax({imageSrc: './images/slide-2.jpg'});

arkadii_parovozov
03.06.2017, 11:57
Пробовал. При загрузке подставляется это значение, а при работе скрипта слайдера изображения не меняются function nextSlide(slide){
currentSlide = slide;

if(currentSlide == 0 || currentSlide == 3)
{
currentSlide = 1;

$('#id1').parallax({imageSrc: 'images/slide-1.jpg'});

setTimeout(nextSlide.bind(null, 1), 4000);
}
else if(currentSlide == 1)
{
currentSlide = 2;

$('#id1').parallax({imageSrc: 'images/slide-2.jpg'});

setTimeout(nextSlide.bind(null, 2), 4000);
}
else
{
currentSlide = 3;

$('#id1').parallax({imageSrc: 'images/slide-3.jpg'});

setTimeout(nextSlide.bind(null, 3), 4000);
}
}

рони
03.06.2017, 12:04
arkadii_parovozov,
как вариант добавить
jQuery(window).trigger('resize').trigger('scroll') ;
в строки 9,17,25

arkadii_parovozov
03.06.2017, 12:34
Не помогло...

рони
03.06.2017, 12:55
arkadii_parovozov, скрипт в самый низ страницы , индекс подобрать самостоятельно eq(3).
<script>
function nextSlide(slide){
currentSlide = slide;

if(currentSlide == 0 || currentSlide == 3)
{
currentSlide = 1;

$('.parallax-slider').eq(3).attr({src: 'http://bkpics.com/content/uploads/2016/04/253.jpg'});

setTimeout(nextSlide.bind(null, 1), 4000);
}
else if(currentSlide == 1)
{
currentSlide = 2;

$('.parallax-slider').eq(3).attr({src: 'http://fotooboi-ekb.ru/files/image/fotooboi_priroda_135369737.sm.jpg'});

setTimeout(nextSlide.bind(null, 2), 4000);
}
else
{
currentSlide = 3;

$('.parallax-slider').eq(3).attr({src: 'http://i.ucrazy.ru/files/i/2007.5.14/forestta.jpg'});

setTimeout(nextSlide.bind(null, 3), 4000);
}
}
nextSlide(1)
</script>
</body>
</html>

arkadii_parovozov
03.06.2017, 13:57
Спасибо большое! Для одного класса работает и без eq(). Я так понимаю что js просто ищет src у элемента и меняет его, или я вообще ничего не понимаю...

рони
03.06.2017, 14:17
arkadii_parovozov,
тема и всё что в ней тихий ужас, когда нибудь и вы это поймёте, заработало и хорошо.

j0hnik
03.06.2017, 15:29
Костыли! куда ж без них! :cray:

StartGames
28.09.2023, 20:25
new_img.setAttribute("data-image-src", "./images/slide-2.jpg");

просто нужно было сделать так:

new_img.attr('data-image-src', './images/slide-2.jpg');