Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2016, 15:22
Новичок на форуме
Отправить личное сообщение для kex15i10 Посмотреть профиль Найти все сообщения от kex15i10
 
Регистрация: 16.06.2016
Сообщений: 5

Почему крашится анимация
собственно сабж
function load_img(count){
	var height = $("#slider").height();
	var width = $("#slider").width();

	$(".slide").each(function(index, el) {
		if (index<10){
			var left = - 1 * (index * (width / count));
			$(this).css({
				backgroundSize: width, height,
				backgroundImage: "url(pics/slider/pic.jpg)",
				backgroundPosition: left
			});
		}	
		if (index>9 && index<20){
			var left = - 1 * (index * (width / count));
			$(this).css({
				backgroundSize: width, height,
				backgroundImage: "url(pics/slider/pic2.jpg)",
				backgroundPosition: left
			});
		}		
	});
}
function slider_wrapper(slides_count, slide_elements){
	var wrapper_height = $("#slider").height() * (slides_count + 1);
	var wrapper_width = $("#slider").width();
	var slide_now = 0;
	var slide_element_width = $("#slider").width() / slide_elements;
	var top = 0;
	var counter = 0;

	$("#slider").append("<div id='slider_wrapper'>");
	$("#slider_wrapper").css({
		height: wrapper_height,
		width: wrapper_width,
		top: "0",
		left: "0",
		margin: "0",
		padding: "0",
		position: "absolute"
	});
	for (var i=0; i <= slides_count; i++){
		for (var j=0; j<slide_elements; j++)
			$("#slider_wrapper").append("<div class='slide'>");
	}
	$(".slide").each(function(index, el) {
		left = counter * slide_element_width;
		counter++;
		slides[index] = el;

		//if (index < slides_count * slide_elements){
			$(el).css({
				backgroundColor: random_color(),
				width: slide_element_width,
				height: $("#slider").height(),
				margin: "0",
				padding: "0",
				listStyle: "none",
				position: "absolute",
				left: left,
				top: top
			});
			if ((index + 1) % slide_elements == 0){
				top += $("#slider").height();
				counter = 0;
			}
		//}
	});
	load_img(slide_elements);
	$("#slider").scrollTop($("#slider").height() * (slides_count - 1));
	slider_animation(slides_count, slide_elements);
}
function slider_animation(slides_count, slide_elements){
	setInterval(function(){
		$(".slide").each(function(index, el) {
			var top = Math.round($(el).position().top) + Math.round($("#slider").height());
			
			$(el).animate({
				top: top
			}, 500, function(){
				if (top > slides_count * Math.round($("#slider").height()))
					$(el).css({
						top: "0"
					});
				//load_img(10);
			});
		});
		
		
	}, 1000);
}

при сворачивании/розворачивании, открытии вкладки происходит (судя по всему) неправильный пересчет координат и анимация работает не правильно...с чем это связано и как бороться?
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2016, 15:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

kex15i10,
setInterval лучше никогда не использовать нигде и лучше полный макет и пояснение что код делает.
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2016, 15:58
Новичок на форуме
Отправить личное сообщение для kex15i10 Посмотреть профиль Найти все сообщения от kex15i10
 
Регистрация: 16.06.2016
Сообщений: 5

а что вместо setInterval делать? для задания анимации?
алгоритм:
мне необходимо разбить изображение на несколько частей, что бы они по очереди "падали" в низ. функция slider_wrapper(slides_count, slide_elements) - создаем обвертку для слайдера и заполняем ее подслайдами (именно части изображения). slides_count - количество слайдов(картинок), slide_elements - на сколько частей бьется изображение. load_img(count) - загружает картинки в блоки (подслайды)
slider_animation(slides_count, slide_elements) - функция для анимации
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2016, 16:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

kex15i10,
setTimeout или callback в animate
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2016, 16:21
Новичок на форуме
Отправить личное сообщение для kex15i10 Посмотреть профиль Найти все сообщения от kex15i10
 
Регистрация: 16.06.2016
Сообщений: 5

callback - в смысле рекурсию использовать?
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2016, 16:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

kex15i10,
на всякий случай
backgroundSize: width+"px "+height + "px",
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2016, 16:45
Новичок на форуме
Отправить личное сообщение для kex15i10 Посмотреть профиль Найти все сообщения от kex15i10
 
Регистрация: 16.06.2016
Сообщений: 5

ну проблемка в том что сбивается анимация...на сколько понимаю из -за того что таймер сбивается....
быть может стоит воспользоваться другим языком программирования?не подскажите чтони-будь для создания визуальных эффектов?альтернативу js
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2016, 18:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

слайдер падающие блоки
kex15i10,
вариант на скорую руку ... без прелоадера картинок

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    #slider{
      position: relative;
      width: 500px;
      height: 300px;
      background-color: #000000;
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    #slider div{
      margin: 0;
      padding: 0;
      position: absolute;
      background-color: #0000FF;
      background-repeat: no-repeat;

    }

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
    var slider = $("#slider");
    var height = slider.height();
    var width = slider.width();

    function load_img(next, src, x, y) {
        var w = width / x | 0;
        var h = height / y | 0;
        slider.height(height = h * y);
        slider.width(width = w * x);
        slider.css({
            backgroundSize: width + "px " + height + "px",
            backgroundImage: "url(" + next + ")"
        });
        var n = 0,
            arr = Array(x * y);
        $.each(arr, function(i, el) {
            !n && y--;
            arr[i] = $("<div>", {
                css: {
                    left: n * w,
                    top: y * h,
                    width: w,
                    height: h,
                    backgroundImage: "url(" + src + ")",
                    backgroundPosition: -n * w + "px " + -y * h + "px",
                    backgroundSize: width + "px " +
                        height + "px"
                }
            }).prependTo(slider);
            n = ++n % x
        });
        return arr
    }

    function show(arr) {
        if (!arr.length) setTimeout(go, 3E3);
        var i = Math.floor(Math.random() * arr.length);
        i = arr.splice(i, 1)[0];
        i.css({
            "z-index": 100
        }).animate({
            top: height
        }, {
            easing: "easeOutCirc",
            duration: 1200,
            complete: function() {
                i.remove();
                show(arr)
            }
        })
    }
    var arrSrc = ["http://www.kudatotam.ru/upload/1/3099_3_s.jpg", "http://333v.ru/uploads/fb/fb4a0febf5211a49f33cd0a5edefcea0.jpg", "http://wallbattle.ru/ph/41/zelen_dereva_ls_1920x1080.jpg"];

    function go() {
        arrSrc.push(arrSrc.shift());
        var arr = load_img(arrSrc[1], arrSrc[0], 4, 3);
        show(arr)
    }
    go()
});
  </script>
</head>

<body>
<div id="slider"></div>

</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2016, 22:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

слайдер блоками с opacity

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    #slider{
      position: relative;
      width: 500px;
      height: 300px;
      background-color: #000000;
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
    #slider div{
      margin: 0;
      padding: 0;
      position: absolute;
      background-color: #0000FF;
      background-repeat: no-repeat;

    }

 </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
  <script>
$(function() {
    function n(e, p, c, b) {
        var a = g / c | 0,
            k = h / b | 0;
        d.height(h = k * b);
        d.width(g = a * c);
        d.css({
            backgroundSize: g + "px " + h + "px",
            backgroundImage: "url(" + e + ")"
        });
        var f = 0,
            l = Array(c * b);
        $.each(l, function(e, m) {
            !f && b--;
            l[e] = $("<div>", {
                css: {
                    left: f * a,
                    top: b * k,
                    width: a,
                    height: k,
                    backgroundImage: "url(" + p + ")",
                    backgroundPosition: -f * a + "px " + -b * k + "px",
                    backgroundSize: g + "px " + h + "px"
                }
            }).prependTo(d);
            f = ++f % c
        });
        return l
    }

    function q(a, n) {
        (r ^= 1) && a.reverse();
        $.when.apply(null, a.map(function(k, c) {
            var b = (n/a.length) * c;
            return k.css({
                "z-index": 100
            }).delay(b).animate({
                opacity: 0
            }, {
                easing: "easeOutCirc",
                duration: 300
            })
        })).done(function() {
            a.forEach(function(a) {
                a.remove()
            });
            setTimeout(m, 1E3)
        })
    }
        var op = [1,100];
    function m() {
        Math.random() < .2 && op.reverse();
        var e = n(a[1].src, a[0].src, op[0], op[1]);
        q(e,1200);
        a.push(a.shift())
    }
    var d = $("#slider"),
        h = d.height(),
        g = d.width(),
        r = 0,
        a = ["http://kamozin.com/storage/album/1/n/7/b10606515b84ab728fddc89.jpg", "http://www.fonstola.ru/download.php?file=201308/1024x600/fonstola.ru-103371.jpg", "http://japonskie.ru/puzzle/source/gori_na_zakate.jpg"],
        a = function(a, d) {
            function c() {
                b.push(this);
                2 == b.length && d()
            }
            var b = [];
            a.forEach(function(a) {
                var b = new Image;
                b.onload = c;
                b.src = a
            });
            return b
        }(a, m)
});
  </script>
</head>

<body>
<div id="slider"></div>

</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 17.06.2016, 14:23
Новичок на форуме
Отправить личное сообщение для kex15i10 Посмотреть профиль Найти все сообщения от kex15i10
 
Регистрация: 16.06.2016
Сообщений: 5

хмм спасибо))сяду разберусь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация после анимации Narahon Элементы интерфейса 12 02.04.2015 22:06
Анимация меню spiros Элементы интерфейса 10 10.07.2014 17:49
Анимация gif картинки при нажатии на ссылку ainur777 Общие вопросы Javascript 2 06.07.2014 16:23
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Цикличность анимация? SashaBorandi jQuery 1 25.12.2008 09:20