जवाबों:
आप एक तत्व में स्लाइड करने के लिए CSS3 बदलाव या शायद CSS3 एनिमेशन का उपयोग कर सकते हैं।
ब्राउज़र समर्थन के लिए: http://caniuse.com/
मैंने आपको केवल यह दिखाने के लिए दो त्वरित उदाहरण दिए कि मेरा क्या मतलब है।
सीएसएस संक्रमण (होवर पर)
प्रासंगिक कोड
.wrapper:hover #slide {
transition: 1s;
left: 0;
}
इस मामले में, मैं सिर्फ से स्थिति संक्रमण left: -100px;
के लिए 0;
एक 1s के साथ। समयांतराल। उपयोग करने वाले तत्व को स्थानांतरित करना भी संभव हैtransform: translate();
सीएसएस एनीमेशन
#slide {
position: absolute;
left: -100px;
width: 100px;
height: 100px;
background: blue;
-webkit-animation: slide 0.5s forwards;
-webkit-animation-delay: 2s;
animation: slide 0.5s forwards;
animation-delay: 2s;
}
@-webkit-keyframes slide {
100% { left: 0; }
}
@keyframes slide {
100% { left: 0; }
}
उपरोक्त (डेमो वन) के समान सिद्धांत, लेकिन एनीमेशन 2s के बाद स्वचालित रूप से शुरू होता है, और इस मामले में मैंने सेट animation-fill-mode
किया है forwards
, जो एनीमेशन समाप्त होने पर डिव को दृश्यमान रखते हुए अंतिम स्थिति को बनाए रखेगा।
जैसा कि मैंने कहा, यह दिखाने के लिए दो त्वरित उदाहरण हैं कि यह कैसे किया जा सकता है।
EDIT: सीएसएस एनिमेशन और बदलाव के बारे में जानकारी के लिए देखें:
एनिमेशन
https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_animations
संक्रमण
https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions
आशा है कि इससे मदद मिली।
transform
प्रदर्शन समस्याओं (मोबाइल) से बचने के लिए CSS3 2D का उपयोग करेंएक आम नुकसान का उपयोग करने के बजाय चेतन
left
/top
/right
/bottom
गुण हैसीएसएस-परिणतउसी प्रभाव को प्राप्त करने के लिए। कई कारणों से, परिवर्तनों के शब्दार्थ उन्हें बोझ उतारने में आसान बनाते हैं, लेकिनleft
/top
/right
/bottom
बहुत अधिक कठिन होते हैं।
स्रोत: मोज़िला डेवलपर नेटवर्क (MDN)
डेमो:
var $slider = document.getElementById('slider');
var $toggle = document.getElementById('toggle');
$toggle.addEventListener('click', function() {
var isOpen = $slider.classList.contains('slide-in');
$slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in');
});
#slider {
position: absolute;
width: 100px;
height: 100px;
background: blue;
transform: translateX(-100%);
-webkit-transform: translateX(-100%);
}
.slide-in {
animation: slide-in 0.5s forwards;
-webkit-animation: slide-in 0.5s forwards;
}
.slide-out {
animation: slide-out 0.5s forwards;
-webkit-animation: slide-out 0.5s forwards;
}
@keyframes slide-in {
100% { transform: translateX(0%); }
}
@-webkit-keyframes slide-in {
100% { -webkit-transform: translateX(0%); }
}
@keyframes slide-out {
0% { transform: translateX(0%); }
100% { transform: translateX(-100%); }
}
@-webkit-keyframes slide-out {
0% { -webkit-transform: translateX(0%); }
100% { -webkit-transform: translateX(-100%); }
}
<div id="slider" class="slide-in">
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
</ul>
</div>
<button id="toggle" style="position:absolute; top: 120px;">Toggle</button>
यहाँ एक और समाधान है css ट्रांस्फ़ॉर्मेशन (मोबाइल पर प्रदर्शन उद्देश्यों के लिए, @ mate64 का उत्तर देखें) एनिमेशन और कीफ़्रेम का उपयोग किए बिना।
मैंने दोनों ओर स्लाइड से दो संस्करण बनाए।
$('#toggle').click(function() {
$('.slide-in').toggleClass('show');
});
.slide-in {
z-index: 10; /* to position it in front of the other content */
position: absolute;
overflow: hidden; /* to prevent scrollbar appearing */
}
.slide-in.from-left {
left: 0;
}
.slide-in.from-right {
right: 0;
}
.slide-in-content {
padding: 5px 20px;
background: #eee;
transition: transform .5s ease; /* our nice transition */
}
.slide-in.from-left .slide-in-content {
transform: translateX(-100%);
-webkit-transform: translateX(-100%);
}
.slide-in.from-right .slide-in-content {
transform: translateX(100%);
-webkit-transform: translateX(100%);
}
.slide-in.show .slide-in-content {
transform: translateX(0);
-webkit-transform: translateX(0);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="slide-in from-left">
<div class="slide-in-content">
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
</ul>
</div>
</div>
<div class="slide-in from-right">
<div class="slide-in-content">
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
</div>
</div>
<button id="toggle" style="position:absolute; top: 120px;">Toggle</button>
उपयोग छोड़ने के लिए अधिकार का उपयोग करें:
HTML:
<div class="nav ">
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">SERVICES</a></li>
<li><a href="#">CONTACT</a></li>
</ul>
</div>
सीएसएस:
/*nav*/
.nav{
position: fixed;
right:0;
top: 70px;
width: 250px;
height: calc(100vh - 70px);
background-color: #333;
transform: translateX(100%);
transition: transform 0.3s ease-in-out;
}
.nav-view{
transform: translateX(0);
}
.nav ul{
margin: 0;
padding: 0;
}
.nav ul li{
margin: 0;
padding: 0;
list-style-type: none;
}
.nav ul li a{
color: #fff;
display: block;
padding: 10px;
border-bottom: solid 1px rgba(255,255,255,0.4);
text-decoration: none;
}
जे एस:
$(document).ready(function(){
$('a#click-a').click(function(){
$('.nav').toggleClass('nav-view');
});
});
मुझे @ mate64 का उत्तर पसंद आया इसलिए मैं पुन: उपयोग करने जा रहा हूं कि नीचे स्लाइड बनाने और ऊपर एनिमेशन बनाने के लिए थोड़े संशोधन के साथ:
var $slider = document.getElementById('slider');
var $toggle = document.getElementById('toggle');
$toggle.addEventListener('click', function() {
var isOpen = $slider.classList.contains('slide-in');
$slider.setAttribute('class', isOpen ? 'slide-out' : 'slide-in');
});
#slider {
position: absolute;
width: 100px;
height: 100px;
background: blue;
transform: translateY(-100%);
-webkit-transform: translateY(-100%);
}
.slide-in {
animation: slide-in 0.5s forwards;
-webkit-animation: slide-in 0.5s forwards;
}
.slide-out {
animation: slide-out 0.5s forwards;
-webkit-animation: slide-out 0.5s forwards;
}
@keyframes slide-in {
100% { transform: translateY(0%); }
}
@-webkit-keyframes slide-in {
100% { -webkit-transform: translateY(0%); }
}
@keyframes slide-out {
0% { transform: translateY(0%); }
100% { transform: translateY(-100%); }
}
@-webkit-keyframes slide-out {
0% { -webkit-transform: translateY(0%); }
100% { -webkit-transform: translateY(-100%); }
}
<div id="slider" class="slide-in">
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Dolor</li>
</ul>
</div>
<button id="toggle" style="position:absolute; top: 120px;">Toggle</button>