Анимация в IE (проблема)
Мне надо было написать несложный JS анимацию, вот собственно и она:
function Start_animation() { var change = false; var index_img = 0; var class_this = this; this.images = function() { return new Array ('header', 'header_2', 'header_3'); } this.animate = function() { change = (change) ? (false) : (true); $('#header .header_img img').each(function (index, el) { if ($(el).closest('.header_img').css('opacity') == 0) $(el).attr('src', '/skin/img/BG/' + get_next() + '.png'); }); $('#header #first_h').animate({opacity: (change) ? (0) : (1)}, 1500); $('#header #second_h').animate({opacity: (change) ? (1) : (0)}, 1500); setInterval(this.animate, 5000); } var get_next = function() { index_img++; index_img = ((index_img + 1) <= class_this.images().length) ? (index_img) : (0); return class_this.images()[index_img]; } } var Top_animation = new Start_animation(); Top_animation.animate(); *** В массиве хранятся названия картинок, чтоб время на понимание сией ерунды не тратили. Все отлично и прекрасно, но он не работает в IE. Дебажил - все норм src картинок меняется (правда скрипт вроде как иногда в IE останавливается ..), но animate не работает вообще. Картинки в PNG-24, возможно связано с этим. И дебагер IE ругался на: setInterval(this.animate, 5000); , вроде как невалидный аргумент .. Переправлял на setInterval(function() { class_this.animate() }, 5000);, везде все работает, конечно же кроме IE :) Очень прошу помочь знающий народ. Заранее благодарен!!! |
Andrey_rtv,
Деио сайт есть ? И юзайте правильную запись в топике - так - это не читабельно http://javascript.ru/formatting |
Спасибо, ваш ответ многое прояснил ...
Насчет форматирования, код настолько просто, что необходимости в форматировании не видел, но вы, вообщем, правы, исправлюсь. Домен сайта на разработку: http://abisoft.oliwa-pro.ru . Можете потестить. |
Andrey_rtv,
Цитата:
function Start_animation() { var change = false; var index_img = 0; var class_this = this; this.images = function() { return new Array ('header', 'header_2', 'header_3'); } this.animate = function() { change = (change) ? (false) : (true); $('#header .header_img img').each(function (index, el) { if ($(el).closest('.header_img').css('opacity') == 0) { $(el).attr('src', '/skin/img/BG/' + get_next() + '.png'); } }); $('#header #first_h').animate({opacity: (change) ? (0) : (1)}, 1500); $('#header #second_h').animate({opacity: (change) ? (1) : (0)}, 1500); setInterval(this.animate, 5000); } var get_next = function() { index_img++; index_img = ((index_img + 1) <= class_this.images().length) ? (index_img) : (0); return class_this.images()[index_img]; } } var Top_animation = new Start_animation(); Top_animation.animate(); Так - Симпатичнее ? Чичас гляну на сайт - правдо сплю уже |
Andrey_rtv,
У Вас там две библиотеки jQuery Переставьте Наверх с заменой или уберите 2 версию <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> |
Спасибо, что глянули. Попробую.
P.S. Насчет кнопочки вы правы |
Я убрал 1 библиотеку.
Очевидно, что ничего не заработало, т.к. при 2х библиотеках работали остальные элементы jQuery и в IE в том числе. И вообще не очень понятно как они должны друг другу мешать .. пространство имен перезаписывают. Но все равно спасибо за совет! |
следите за this в Top_animation.animate.
подсказка - console.log |
Цитата:
|
melky - это напоминает код да винчи, осталось навести меня на путь тайной секты, владеющей сокральным знанием.
Если вас не затруднит - напишите четко, что вы хотели сказать. В чем конкретно проблема? class_this - this объекта Start_animation, ничего плохого пока не вижу. Если в рекурсию поставить alert, то будет выводится сообщение. Проблема скорее всего в opacity и IE и PNG-24, хотя, возможно, я неправ. Консоль IE ругался на неправильный аргумент setInterval(this.animate, 5000); , хотя после подстановки setInterval(function() {class_this .animate()}, 5000)- ошибка пропадает, но анимация не появляется. |
Часовой пояс GMT +3, время: 05:20. |