16.06.2016, 15:22
|
Новичок на форуме
|
|
Регистрация: 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);
}
при сворачивании/розворачивании, открытии вкладки происходит (судя по всему) неправильный пересчет координат и анимация работает не правильно...с чем это связано и как бороться?
|
|
16.06.2016, 15:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
kex15i10,
setInterval лучше никогда не использовать нигде и лучше полный макет и пояснение что код делает.
|
|
16.06.2016, 15:58
|
Новичок на форуме
|
|
Регистрация: 16.06.2016
Сообщений: 5
|
|
а что вместо setInterval делать? для задания анимации?
алгоритм:
мне необходимо разбить изображение на несколько частей, что бы они по очереди "падали" в низ. функция slider_wrapper(slides_count, slide_elements) - создаем обвертку для слайдера и заполняем ее подслайдами (именно части изображения). slides_count - количество слайдов(картинок), slide_elements - на сколько частей бьется изображение. load_img(count) - загружает картинки в блоки (подслайды)
slider_animation(slides_count, slide_elements) - функция для анимации
|
|
16.06.2016, 16:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
kex15i10,
setTimeout или callback в animate
|
|
16.06.2016, 16:21
|
Новичок на форуме
|
|
Регистрация: 16.06.2016
Сообщений: 5
|
|
callback - в смысле рекурсию использовать?
|
|
16.06.2016, 16:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
kex15i10,
на всякий случай
backgroundSize: width+"px "+height + "px",
|
|
16.06.2016, 16:45
|
Новичок на форуме
|
|
Регистрация: 16.06.2016
Сообщений: 5
|
|
ну проблемка в том что сбивается анимация...на сколько понимаю из -за того что таймер сбивается....
быть может стоит воспользоваться другим языком программирования?не подскажите чтони-будь для создания визуальных эффектов?альтернативу js
|
|
16.06.2016, 18:15
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
слайдер падающие блоки
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>
|
|
16.06.2016, 22:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
слайдер блоками с 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>
|
|
17.06.2016, 14:23
|
Новичок на форуме
|
|
Регистрация: 16.06.2016
Сообщений: 5
|
|
хмм спасибо))сяду разберусь
|
|
|
|