Вариант с запуском анимации только при прокрутке в зоне анимации
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
.anim-1 {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 2.5s linear alternate forwards ;
}
@keyframes dash {
0% {
stroke-dashoffset: 1000;
}
90% {
fill-opacity: 0;
}
100% {
stroke-dashoffset: 0;
fill-opacity: 1;
}
}
.anim-2 {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash2 4.5s linear alternate forwards ;
}
@keyframes dash2 {
0% {
fill-opacity: 0;
}
50% {
fill-opacity: 0;
stroke-dashoffset: 1000;
}
100% {
stroke-dashoffset: 0;
fill-opacity: 1;
}
}
</style>
<script type="text/javascript">
function goSVG() {
var buff = document.getElementById('svgBlock');
buff.innerHTML = buff.innerHTML;
}
</script>
</head>
<body>
<div style="height:100px;"></div>
<div id="svgBlock" style="height:100px; overflow: auto;" onscroll="goSVG();">
<svg width="450px" height="160px">
<text id="svgText" class="anim-1" x="0" y="158px" font-size="200px" stroke="#222121" stroke-width="1" fill-opacity="0">WEB</text>
</svg>
<svg width="300px" height="20px">
<line class="anim-2" fill-opacity="0" stroke="#000" stroke-width="1" x1="20" x2="300" y1="18" y2="18"/>
</svg>
</div>
</body>
</html>
[/quote] |
А есть вариант еще варианты как еще можно сделать, не очень хочется привязываться в высоте, постольку блок может находится на разной высоте.
|
dima-kruglyak,
Я наконец вроде осознал, что вам нужно: запуск анимации при появлении объекта в видимой области. Кстати, на упомянутом вами сайте для управления используется библиотека https://github.com/Prinzhorn/skrollr |
Вы можете с этим помочь? Я думал делать сделать запуск вот так, но не получается
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
<style type="text/css">
body {
height: 2000px;
}
.anim-1 {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 2.5s linear alternate forwards;
}
@keyframes dash {
0% {
stroke-dashoffset: 1000;
}
90% {
fill-opacity: 0;
}
100% {
stroke-dashoffset: 0;
fill-opacity: 1;
}
}
</style>
<script type="text/javascript">
$(document).ready(function() {
var show = true;
var countbox = "#my-block";
$(window).on("scroll load resize", function() {
if (!show) return false; // Отменяем показ анимации, если она уже была выполнена
var w_top = $(window).scrollTop(); // Количество пикселей на которое была прокручена страница
var e_top = $(countbox).offset().top; // Расстояние от блока со счетчиками до верха всего документа
var w_height = $(window).height(); // Высота окна браузера
var d_height = $(document).height(); // Высота всего документа
var e_height = $(countbox).outerHeight(); // Полная высота блока со счетчиками
if (w_top + 200 >= e_top || w_height + w_top == d_height || e_height + e_top < w_height) {
function goSVG() {
var buff = document.getElementById('svgBlock');
buff.innerHTML = buff.innerHTML;
}
show = false;
}
});
});
</script>
</head>
<body>
<div style="height:1000px;"></div>
<div id="my-block">
<div id="svgBlock">
<svg width="450px" height="160px">
<text id="svgText" class="anim-1" x="0" y="158px" font-size="200px" stroke="#222121" stroke-width="1" fill-opacity="0">WEB</text>
</svg>
</div>
</div>
</body>
</html>
|
А если делать через skrollr.js то как можно сделать запуск автоматически
http://codepen.io/sarahtully/pen/Eeawk |
ну вот как-то так
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>SVG</title>
<style type="text/css">
@keyframes dash {
0% {
stroke-dashoffset: 1000;
}
90% {
fill-opacity: 0;
}
100% {
stroke-dashoffset: 0;
fill-opacity: 1;
}
}
</style>
</head>
<body>
<div style="height:500px;"></div>
<svg width="650px" height="160px">
<text id="svgText" x="0" y="158px" font-size="200px" stroke="#222121" stroke-width="1" data-0="stroke-dasharray:1000;stroke-dashoffset:1000;animation:dash 2.5s linear alternate forwards ;" style="fill-opacity:0;">WEB</text>
</svg>
<script type="text/javascript" src="http://prinzhorn.github.io/skrollr/dist/skrollr.min.js"></script>
<script type="text/javascript">
skrollr.init();
</script>
</body>
</html>
|
В принципе, skrollr работает так
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>SVG</title>
</head>
<body>
<div style="height:200px;"></div>
<svg width="650px" height="160px">
<text id="svgText" class="skrollable skrollable-between" x="0" y="158px" font-size="70px" stroke="#222121" stroke-width="1" data-top="stroke-dasharray:1000;stroke-dashoffset:1000;fill-opacity:0;" data-bottom="stroke-dasharray:1000;stroke-dashoffset:1000;fill-opacity:0;" data-center="stroke-dasharray:1000;stroke-dashoffset:0;fill-opacity:1" >WEB</text>
</svg>
<script type="text/javascript" src="http://prinzhorn.github.io/skrollr/dist/skrollr.min.js"></script>
<script type="text/javascript">
skrollr.init();
</script>
</body>
</html>
На большом окне лучше видно, чем на маленьком окошке здесь. |
Спасибо
|
Ваш вариант в исправленном и доработанном виде (скрещивать svg со skrollr - все равно, что ужа и ежа)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>SVG</title>
<style type="text/css">
body {
height: 2000px;
}
.anim-1 {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 2.5s linear alternate forwards;
}
@keyframes dash {
0% {
stroke-dashoffset: 1000;
}
90% {
fill-opacity: 0;
}
100% {
stroke-dashoffset: 0;
fill-opacity: 1;
}
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript">
var svgHTML = '<svg width="450px" height="160px"><text id="svgText" class="anim-1" x="0" y="158px" font-size="200px" stroke="#222121" stroke-width="1" fill-opacity="0">WEB</text></svg>';
var countbox = "#svgBlock";
var show = true;
$(window).on("scroll load resize", function () {
var w_top = $(window).scrollTop(); // Количество пикселей на которое была прокручена страница
var e_top = $(countbox).offset().top; // Расстояние от блока со счетчиками до верха всего документа
var w_height = $(window).height(); // Высота окна браузера
var d_height = $(document).height(); // Высота всего документа
var e_height = $(countbox).outerHeight(); // Полная высота блока со счетчиками
if ((w_top + w_height) > e_top && w_top < (e_top + e_height)) {
if (show) {
$(countbox).html(svgHTML);
show = false;
}
} else {
show = true;
$(countbox).html("");
}
});
</script>
</head>
<body>
<div style="height:1000px;"></div>
<div id="svgBlock">
</div>
<div style="height:1000px;"></div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 09:51. |