Выдвижение блока с текстом без искажений
При рендеринге видно как текcт подстраивается под анимацию при выезде блока, немного искажается (возможно что только в Firefox).
https://jsfiddle.net/jurvrn/b7um102r/2/ Можно ли переделать CSS на JavaScript или JQuery чтобы искажения при анимации пропали? |
Цитата:
|
рони,
Очевидно это заметно в "настольном" firefox. Это можно описать как бледный текст становится темнее по окончании transition |
jurvrn,
не могу увидеть ... но попробуйте сбросить стили ... добавить в самое начало <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/reseter.css/1.1.2/reseter.min.css'> |
рони,
Попробую, Вы если замедлите, то возможно артефакт будет виднее |
рони,
не помогло, вот видеоскрин сделал - этот артефакт видно (как буквы темнеют) https://vimeo.com/547455193 если что на сайте можно глянуть - jurvrn.ru |
jurvrn,
transition: all 0.3s ease-in-out; замените на transform |
|
jurvrn,
:-? transition: transform 0.3s ease-in-out; |
Цитата:
спасибо, но я бы хотел переделать на JQuery - можно? просто slideUp/slideDown знаю, а slideLeft/slideRight вроде такого нет |
Цитата:
https://api.jqueryui.com/slide-effect/ |
рони,
сделал как понял, так как мануал короткий, и работает не так как надо ( https://jsfiddle.net/jurvrn/oqpktewn/14/ ещё пример сделал https://jsfiddle.net/jurvrn/oqpktewn/23/ и нашел вот это, это уже анимация https://www.tutorialrepublic.com/cod...d-right-effect Но мне нужен такой эффект как уже у меня есть. То есть на hover закрепить слайд. Ну и чтобы срабатывал toggle когда hover пропадал |
slideRight jquery
jurvrn,
без jquery-ui
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#toggle {
position: absolute;
width: 100px;
height: 100px;
background: #ccc;
left: calc(100% - 100px);
overflow: hidden;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(function() {
let direction = 0;
$(document).click(function() {
direction ^= 1;
let options = direction ? {
width: "-=100px",
left: "+=100px"
} : {
width: "+=100px",
left: "-=100px"
}
$("#toggle").stop().animate(
options, {
duration: 1200,
complete: function() {
this.style.left = direction ? "100%" : "";
}
});
});
});
</script>
</head>
<body>
<p>Click anywhere to toggle the box.</p>
<div id="toggle">toggle slideRight</div>
</body>
</html>
|
рони,
кончно понимаю Цитата:
Попытался заставить блок вылезать справа не получилось у меня. Просьба убрать блок за границу экрана справа и чтобы он выплывал влево |
Цитата:
|
мысли вслух:
если можно использовать css, то лучше использовать css, чем js и тем более jquery. |
Цитата:
Вы видели искажения, может JS/JQuery отработается по другому вот ещё вроде хороший код но не могу заставить его работать https://codepen.io/intersk/pen/YzZwyYj или https://codepen.io/intersk/pen/KKWVzQb |
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#toggle {
position: absolute;
width: 0px;
height: 100px;
background: #ccc;
left: 100%;
overflow: hidden;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(function() {
let direction = 1;
$(document).click(function() {
direction ^= 1;
let options = direction ? {
width: "-=100px",
left: "+=100px"
} : {
width: "+=100px",
left: "-=100px"
}
$("#toggle").stop().animate(
options, {
duration: 1200,
complete: function() {
this.style.left = direction ? "" : "calc(100% - 100px)";
}
});
});
});
</script>
</head>
<body>
<p>Click anywhere to toggle the box.</p>
<div id="toggle">toggle slideRight</div>
</body>
</html>
|
рони, спасибо, это то что надо! а как-то упростить, ускорить этот скрипт можно? а то смотрю там вычисления... Или не так понял?
И где там настраивается ширина выезжающего блока? Тем более что планируется она по ширине текста, текст разный, а блоков этих будет несколько (типа меню). Поэтому я не могу всем указать одинаковую ширину... |
Цитата:
|
jurvrn,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
position: relative;
}
.toggle {
position: absolute;
width: 0px;
height: 100px;
background-color: #ccc;
left: calc(100% - var(--left, 0px));
overflow: hidden;
top: 0;
}
.toggle.two {
top: 120px;
background-color: #008000;
}
.toggle > div{
position: relative;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(function() {
let direction = 1;
$(document).click(function() {
direction ^= 1;
$(".toggle").stop().each((i, el) => {
let width = el.dataset.width;
let options = direction ? {
width: `-=${width}`,
left: `+=${width}`
} : {
width: `+=${width}`,
left: `-=${width}`
};
$(el).animate(
options, {
duration: 800,
complete: function() {
this.style.setProperty("--left", direction ? "0px" : `${width}`);
this.style.left = ''
}
});
})
});
});
</script>
</head>
<body>
<p>Click anywhere to toggle the box.</p>
<div class="toggle" data-width="300px"><div style="width:300px">toggle slideRight</div></div>
<div class="toggle two" data-width="100px"><div style="width:100px">toggle slideRight test test</div></div>
</body>
</html>
|
Цитата:
|
рони,
Скрипт попробую и напишу. Неужели он нагружает страницу больше чем css? |
Цитата:
|
рони,
Пока до компьютера не добрался, чтобы попробовать скрипт. Вы его еще больше усложнили ) Пусть нагружает больше , мне сейчас важнее убрать артефакт искажения. Посмотрю как скрипт отработает на моем браузере. В вашем способе нужно задавать ширину изначально точно. Мне бы хотелось чтобы ширина высчиталась динамично, в зависимости от контента. Может в таком случае нужно margin'ами оперировать? |
Цитата:
Цитата:
|
Цитата:
.main-block {
z-index: 1;
position: fixed;
width: 36px;
height: 175px;
top: 0;
bottom: 0;
margin: auto 0;
}
.each-block {
position: relative;
z-index: 2;
display: flex;
margin-bottom: 10px;
}
.iconka-block, .textLine-Out {
height: 36px;
border: black 2px solid;
border-radius: 5px 0 0 5px;
}
.textLine-Out {
z-index: 3;
position: static;
display: flex;
background-color: rgb(213, 231, 248);
-webkit-transition: transform 0.3s ease-in-out;
-moz-transition: transform 0.3s ease-in-out;
-o-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
.textLine-Iner {
margin: auto;
font-size: 16px;
white-space: nowrap;
padding: 0 10px;
}
.iconka-block {
position: absolute;
display: flex;
z-index: 4;
background-color: rgb(226,226,226);
width: 36px;
right: 0;
cursor: pointer;
border-right: none;
}
.iconka-block:hover + .textLine-Out {
-webkit-transform: translateX(calc(-100% + 4px));
-moz-transform: translateX(calc(-100% + 4px));
-ms-transform: translateX(calc(-100% + 4px));
-o-transform: translateX(calc(-100% + 4px));
transform: translateX(calc(-100% + 4px));
}
.iconka-block .icon_all {
font-size: 22px;
text-align: center;
margin: auto;
}
<div class="main-block">
<div class="each-block">
<div class="iconka-block"><i class="fa fa-envelope-o icon_all icon_mail" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">Напишите нам</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-podcast icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">fa2-podcast 2icon</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-bookmark-o icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">33icon_fa-bookmark-o</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-user-circle icon_all icon_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">Вход на сайт</div></div>
</div>
</div>
|
меню справа на css
jurvrn,
оставьте всё как есть, артефакт, если у кого-то и проявится, незаметен. js тут ничего не исправит, и будет только лишним.
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.main-block {
z-index: 1;
position: fixed;
width: 36px;
height: 175px;
top: 0;
bottom: 0;
margin: auto 0;
left: calc(100% - 36px);
}
.each-block {
position: relative;
z-index: 2;
display: flex;
margin-bottom: 10px;
}
.iconka-block, .textLine-Out {
height: 36px;
border: black 2px solid;
border-radius: 5px 0 0 5px;
}
.textLine-Out {
z-index: 3;
position: static;
display: flex;
background-color: rgb(213, 231, 248);
-webkit-transition: transform 0.3s ease-in-out;
-moz-transition: transform 0.3s ease-in-out;
-o-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-ms-transform: translateX(0%);
-o-transform: translateX(0%);
transform: translateX(0%);
}
.textLine-Iner {
margin: auto;
font-size: 16px;
white-space: nowrap;
padding: 0 10px;
}
.iconka-block {
position: absolute;
display: flex;
z-index: 4;
background-color: rgb(226,226,226);
width: 36px;
right: 0;
cursor: pointer;
border-right: none;
}
.iconka-block:hover + .textLine-Out, .textLine-Out:hover {
-webkit-transform: translateX(calc(-100% + 4px));
-moz-transform: translateX(calc(-100% + 4px));
-ms-transform: translateX(calc(-100% + 4px));
-o-transform: translateX(calc(-100% + 4px));
transform: translateX(calc(-100% + 4px));
}
.iconka-block .icon_all {
font-size: 22px;
text-align: center;
margin: auto;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(function() {
});
</script>
</head>
<body>
<div class="main-block">
<div class="each-block">
<div class="iconka-block"><i class="fa fa-envelope-o icon_all icon_mail" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">Напишите нам</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-podcast icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">fa2-podcast 2icon</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-bookmark-o icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">33icon_fa-bookmark-o</div></div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-user-circle icon_all icon_enter" aria-hidden="true"></i></div>
<div class="textLine-Out"><div class="textLine-Iner">Вход на сайт</div></div>
</div>
</div>
</body>
</html>
|
рони,
в вашем посте №21 нет такого артефакта, потому то выдвижение реализуется как-то под другому. Вот к этому и стремлюсь. Вот в этих кодах можно что-то исправить чтобы было как мне нужно? У самого не получается заставить их работать https://codepen.io/intersk/pen/YzZwyYj https://codepen.io/intersk/pen/KKWVzQb |
jurvrn,
https://codepen.io/intersk/pen/YzZwyYj отсутствует jquery-ui https://codepen.io/intersk/pen/KKWVzQb отсутствует # |
меню справа на jquery
jurvrn,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.main-block {
z-index: 1;
position: fixed;
width: 36px;
height: 175px;
top: 0;
bottom: 0;
margin: auto 0;
left: calc(100% - 36px);
}
.each-block {
position: relative;
z-index: 2;
display: flex;
margin-bottom: 10px;
}
.iconka-block,
.textLine-Out {
height: 36px;
border: black 2px solid;
border-radius: 5px 0 0 5px;
}
.textLine-Out {
z-index: 3;
position: static;
display: flex;
background-color: rgb(213, 231, 248);
}
.textLine-Iner {
margin: auto;
font-size: 16px;
white-space: nowrap;
}
.iconka-block {
position: absolute;
display: flex;
z-index: 4;
background-color: rgb(226, 226, 226);
width: 36px;
right: 0;
cursor: pointer;
border-right: none;
}
.textLine-Out {
transform: translateX(calc(-100% + 36px));
}
.textLine-Iner {
width: 0px;
padding: 0 10px;
}
.iconka-block .icon_all {
font-size: 22px;
text-align: center;
margin: auto;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(function() {
$(".each-block").each((i, el) => {
let textLine = el.querySelector(".textLine-Iner");
let width = el.scrollWidth + 10;
$(el).mouseenter(function() {
let options = {
width: `${width}px`,
};
$(textLine).stop().animate(
options, {
duration: 600
})
})
$(el).mouseleave(function() {
let options = {
width: `0px`
};
$(textLine).stop().animate(
options, {
duration: 300
});
})
})
});
</script>
</head>
<body>
<div class="main-block">
<div class="each-block">
<div class="iconka-block"><i class="fa fa-envelope-o icon_all icon_mail" aria-hidden="true"></i></div>
<div class="textLine-Out">
<div class="textLine-Iner">Напишите нам</div>
</div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-podcast icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out">
<div class="textLine-Iner">fa2-podcast 2icon</div>
</div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-bookmark-o icon_all icon_111_enter" aria-hidden="true"></i></div>
<div class="textLine-Out">
<div class="textLine-Iner">33icon_fa-bookmark-o</div>
</div>
</div>
<div class="each-block">
<div class="iconka-block"><i class="fa fa-user-circle icon_all icon_enter" aria-hidden="true"></i></div>
<div class="textLine-Out">
<div class="textLine-Iner">Вход на сайт</div>
</div>
</div>
</div>
</body>
</html>
|
Цитата:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> во втором скрипте что-то тоже не получается когда нужно использовать несколько блоков (не писать же под каждый свой скрипт) я просто убрал из класса стилей transform: translateX(0%); и искажение прекратилось при сохранении работы кода... эта тема решена |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 09:11. |