Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Как в CALLBACK передать текущий элемент???


Автор: Cheizer 24.9.2016, 13:53
Друзья, опять у меня гребаный затык с THIS. Не понимаю как он работает.

Есть некая библиотека JS vivus, для отрисовки SVG. Но суть не в этом.

Вызываю на странице, все параметры все ок, все супер работает. В CALLBACK вызова засовываю еще одну функцию showImage, она должна просто добавлять убирать класс у изображения. И она прекрасно работает.

НО ЗАСАДА В ТОМ ЧТО ОНА ДЕЛАЕТ ЭТО СО ВСЕМИ ПОДОБНЫМИ ЭЛЕМЕНТАМИ НА СТРАНИЦЕ! Понимаю, потому что по классу.

ВНИМАНИЕ ВОПРОС! Как написать функцию showImage или как передать в CALLBACK что то, что бы работа велась именно с ЭТИМ элементом, может какой THIS дописать??? Как только не пробовал и THIS и EL нифига не пашет. :((((((
Подскажите куда копаааааать???????  

Код

<script>  
      var obt = new Vivus('logosvg', {
        type: 'delayed',
        duration: 150
      }, showImage);

    function showImage() {
        showImage.el.setAttribute('height', 'auto');
        $(".svg img").addClass("show");
        $(".svg svg").addClass("hiden");
    };
</script>



Код

<div class="svg">
<img src="img/logo.png" alt="" />
<object id="logosvg" data="/images/logo.svg" type="image/svg+xml"></object>
</div>




Автор: ksnk 25.9.2016, 17:13
Функция showImage может видеть и использовать переменную obt, если этого достаточно.

Автор: Cheizer 26.9.2016, 20:37
Вот так получается? Все равно у соседних подобных сразу вызывается. 
Как передать obt в showImage правильно?  Я много всего перепробовал 

Вот так не работает вообще
Код

 var obt = new Vivus('logosvg', {
        type: 'delayed',
        duration: 150
      }, showImage(obt));



Код

 function showImage(obt) {
        showImage.el.setAttribute('height', 'auto');
        $(".svg img").addClass("show");
        $(".svg svg").addClass("hiden");
    };

Автор: ksnk 26.9.2016, 21:37
Код

var obt = new Vivus('logosvg', {
        type: 'delayed',
        duration: 150
      }, function(){return showImage(obt);});

а так?

Автор: Cheizer 27.9.2016, 00:54
Цитата(ksnk @ 26.9.2016,  21:37)
Код

var obt = new Vivus('logosvg', {
        type: 'delayed',
        duration: 150
      }, function(){return showImage(obt);});

а так?

Спасибо, но так тоже все по старому, у обоих одновременно срабатывает :( у кого первым вызывается .svg img на всех распространяется.  Вечный геморой с классами, не знаю как THIS применить

Код

      var obt1 = new Vivus('1icon', {
        type: 'delayed',
        duration: 500
      }, function(){return showImage(obt1);});
      
      var obt2 = new Vivus('2icon', {
        type: 'delayed',
        duration: 100
      }, function(){return showImage(obt2);});


        function showImage() {
        $(".svg img").addClass("show");
        $(".svg object").addClass("hiden");
    }; 

Автор: ksnk 27.9.2016, 12:18
Зачем тебе параметр, если ты им не пользуешься?
Сам Vivus знает на какой элемент цепляется?

Автор: Cheizer 27.9.2016, 12:46
Vivus id svg прописываю и все 2icon, а showImage  это моя функция, калбек из функции vivus, фот как с классами рисунок показывать по текущему элементу? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)