2017-01-01 4 views
1

Недавно я задал аналогичный вопрос о анимации перехода в divs. (See this post)CSS3 Div Анимация Относительное расстояние

В приведенном ниже фрагменте кода показано мое решение.
Однако анимация работает только в том случае, если ширина задана в пикселях, а не в процентах.
Кто-нибудь знает об этом?

EDIT (Более подробную информацию, чтобы уточнить мою проблему):

В этом разделе веб-сайта, у меня есть заголовок, который всегда должен оставаться таким же и 3 страниц контента, которые могут быть «прокатывается» на входе пользователя.
Таким образом, диапазон левого поля страницы будет варьироваться от -100% до + 100%.

Я хочу, чтобы анимация показала, что пользователь может перейти со страницы 2 (т. Е. Отобразить изображение) на страницу 3 (то есть текст, соответствующий изображению).

Из-за разных размеров окна браузера мне нужна ширина в процентах. К сожалению ...

$(document).ready(function() { 
 
    $(".next").click(function() { 
 
    var current = $(".container").css("left"); 
 
    if (current == "-200px") { 
 
     current = "-400px"; 
 
    } else if (current == "0px") { 
 
     current = "-200px"; 
 
    } 
 
    $(".container").css("left", current); 
 
    }); 
 
    $(".prev").click(function() { 
 
    var current = $(".container").css("left"); 
 
    if (current == "-200px") { 
 
     current = "0px"; 
 
    } else if (current == "-400px") { 
 
     current = "-200px"; 
 
    } 
 
    $(".container").css("left", current); 
 
    }); 
 
});
.row { 
 
    border: 1px solid black; 
 
    height: 200px; 
 
    margin: 0; 
 
    width: 200px; 
 
    padding: 0; 
 
    display: block; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 
.container { 
 
    height: 200px; 
 
    margin: 0; 
 
    width: 600px; 
 
    padding: 0; 
 
    display: block; 
 
    position: absolute; 
 
    left: -200px; 
 
    top: 0; 
 
    -webkit-transition: left 0.5s ease-in-out; 
 
    -moz-transition: left 0.5s ease-in-out; 
 
    transition: left 0.5s ease-in-out; 
 
} 
 
.ins { 
 
    width: 200px; 
 
    float: left; 
 
    height: 200px; 
 
    margin: 0; 
 
    padding: 0; 
 
    background-color: red; 
 
} 
 
.div1 { 
 
    background-color: red; 
 
} 
 
.div2 { 
 
    background-color: green; 
 
} 
 
.div3 { 
 
    background-color: blue; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<!-- Thanks to kittyCat at stackoverflow.com for helping me with this website.--> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
 
    <title>TITLE</title> 
 
    <meta name="Title" content="Main"> 
 
</head> 
 

 
<body> 
 

 
    <div class="row"> 
 
    <div class="container"> 
 
     <div class="ins div1">div-1</div> 
 
     <div class="ins div2">div-2</div> 
 
     <div class="ins div3">div-3</div> 
 
    </div> 
 
    </div> 
 
    <button class="prev">prev</button> 
 
    <button class="next">next</button> 
 

 

 
</body> 
 

 
</html>

+0

Каковы процентные значения, которые следует заменить единицами 'px'? – guest271314

+0

100% (я хочу, чтобы он заполнил полное окно браузера) шириной и где-то около 80% высоты. – Narusan

ответ

1

Я изменил левое позиционирование для преобразования на отдельные элементы:

Теперь, кроме того, класс ряд уложен занимать всю ширину браузера. Класс контейнера составляет до 300% (поскольку он вмещает 3 элемента). И дети установлены на 33% от этого, что в конце составляет 100% от строки.

var pos = 2; /* values 1 - 2 or 3 */ 
 

 
$(document).ready(function() { 
 
    $(".next").click(function() { 
 
    if (pos == 1) { 
 
     $(".container").removeClass("pos1"); 
 
     $(".container").addClass("pos2"); 
 
     pos++; 
 
    } else if (pos == 2) { 
 
     $(".container").removeClass("pos2"); 
 
     $(".container").addClass("pos3"); 
 
     pos++; 
 
    } 
 
    }); 
 
    $(".prev").click(function() { 
 
    if (pos == 3) { 
 
     $(".container").removeClass("pos3"); 
 
     $(".container").addClass("pos2"); 
 
     pos--; 
 
    } else if (pos == 2) { 
 
     $(".container").removeClass("pos2"); 
 
     $(".container").addClass("pos1"); 
 
     pos--; 
 
    } 
 
    }); 
 
});
.row { 
 
    border: 1px solid black; 
 
    height: 200px; 
 
    margin: 0; 
 
    width: 100%; 
 
    padding: 0; 
 
    display: block; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 
.container { 
 
    height: 200px; 
 
    width: 300%; 
 
    margin: 0; 
 
    padding: 0; 
 
    display: block; 
 
    position: absolute; 
 
    top: 0; 
 
} 
 
.ins { 
 
    width: 33.33%; 
 
    height: 200px; 
 
    margin: 0; 
 
    padding: 0; 
 
    float: left; 
 
    transition: transform 0.5s ease-in-out; 
 
} 
 
.div1 { 
 
    background-color: red; 
 
} 
 
.div2 { 
 
    background-color: green; 
 
} 
 
.div3 { 
 
    background-color: blue; 
 
} 
 

 
.pos2 .ins { 
 
transform: translateX(-100%); 
 
} 
 
.pos3 .ins { 
 
transform: translateX(-200%); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<!-- Thanks to kittyCat at stackoverflow.com for helping me with this website.--> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
 
    <title>TITLE</title> 
 
    <meta name="Title" content="Main"> 
 
</head> 
 

 
<body> 
 

 
    <div class="row"> 
 
    <div class="container pos2"> 
 
     <div class="ins div1">div-1</div> 
 
     <div class="ins div2">div-2</div> 
 
     <div class="ins div3">div-3</div> 
 
    </div> 
 
    </div> 
 
    <button class="prev">prev</button> 
 
    <button class="next">next</button> 
 

 

 
</body> 
 

 
</html>

+0

Это не совсем то, что я ищу (по крайней мере, я не вижу способа заставить его работать так, как описано в редактировании). Но спасибо за то, что помогли мне в любом случае! Я отредактировал свой вопрос с дополнительной информацией, чтобы моя проблема и цель стали более ясными. – Narusan

+1

Я изменил некоторые ширины. К счастью, большая часть макета может оставаться неизменной. – vals

+0

Большое вам спасибо. – Narusan

1

Narusan,

Если я понимание вашей цели правильно, часть проблемы заключается в том, что независимо от того, JQuery хочет вернуть РХ единиц к вам. Вы можете установить процентное значение, но, похоже, оно не вернет вам эти проценты.

Я изменил код некоторых, чтобы продемонстрировать это:

$(document).ready(function() { 
 
    $(".next").click(function() { 
 
    var current = $(".container").css("left"); 
 
    console.log(current); 
 
    if (current == "-200px" || current == "-100%") { 
 
     current = "-200%"; 
 
    } else if (current == "0%") { 
 
     current = "-100%"; 
 
    } 
 
    $(".container").css("left", current); 
 
    }); 
 
    $(".prev").click(function() { 
 
    var current = $(".container").css("left"); 
 
    console.log(current); 
 

 
    if (current == "-200px" || current == "-100%") { 
 
     current = "0%"; 
 
    } else if (current == "-200%") { 
 
     current = "-100%"; 
 
    } 
 
    $(".container").css("left", current); 
 
    }); 
 
});

Вы увидите, что значения, напечатанные на консоли всегда в рх, но если вы проверить DOM вас» Посмотрим, что значение% устанавливается на элементе.

Подойдя к проблеме совсем по-другому, подобно тому, как это сделал Вальс, кажется хорошим подходом.

+0

Извините, я должен был четко заявить о своей цели. Я отредактировал свой вопрос, и я надеюсь, что теперь это легче понять. Спасибо за помощь! – Narusan

Смежные вопросы