2017-02-01 16 views
0

Ich verwende this, um ein animiertes Suchfeld zu erstellen.Animieren Suchfeld

Die einzige Sache, ist, dass ich die Position sein muss relative .. Ich brauche das nicht in der Mitte des Bildschirms, sondern unter einem Element und haben die gleiche Funktionalität.

Hier ist ein jsfiddle

ist hier der Code:

HTML


<h2> 
Testing Animated SearchBox 
</h2> 

<div class="search-wrapper"> 
    <div class="input-holder"> 
     <input type="text" class="search-input" placeholder="Type to search" /> 
     <button class="search-icon" onclick="searchToggle(this, event);"><span></span></button> 
    </div> 
    <span class="close" onclick="searchToggle(this, event);"></span> 
</div> 

JS


searchToggle = function searchToggle(obj, evt){ 
    var container = $(obj).closest('.search-wrapper'); 
     if(!container.hasClass('active')){ 
      container.addClass('active'); 
      evt.preventDefault(); 
     } 
     else if(container.hasClass('active') && $(obj).closest('.input-holder').length == 0){ 
      container.removeClass('active'); 
      // clear input 
      container.find('.search-input').val(''); 
     } 
} 

CSS


h2{ 
    margin-bottom: 50px; 
} 

.search-wrapper { 
    position: relative; 
    transform: translate(-50%, -50%); 
    top:50%; 
    left:50%; 
} 
.search-wrapper.active {} 

.search-wrapper .input-holder {  
    height: 70px; 
    width:70px; 
    overflow: hidden; 
    background: rgba(255,255,255,0); 
    border-radius:6px; 
    position: relative; 
    transition: all 0.3s ease-in-out; 
} 
.search-wrapper.active .input-holder { 
    width:450px; 
    border-radius: 50px; 
    background: rgba(0,0,0,0.5); 
    transition: all .5s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
} 

.search-wrapper .input-holder .search-input { 
    width:100%; 
    height: 50px; 
    padding:0px 70px 0 20px; 
    opacity: 0; 
    position: absolute; 
    top:0px; 
    left:0px; 
    background: transparent; 
    box-sizing: border-box; 
    border:none; 
    outline:none; 
    font-family:"Open Sans", Arial, Verdana; 
    font-size: 16px; 
    font-weight: 400; 
    line-height: 20px; 
    color:#FFF; 
    transform: translate(0, 60px); 
    transition: all .3s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
    transition-delay: 0.3s; 
} 
.search-wrapper.active .input-holder .search-input { 
    opacity: 1; 
    transform: translate(0, 10px); 
} 
.search-wrapper .input-holder .search-icon { 
    width:70px; 
    height:70px; 
    border:none; 
    border-radius:6px; 
    background: black; 
    padding:0px; 
    outline:none; 
    position: relative; 
    z-index: 2; 
    float:right; 
    cursor: pointer; 
    transition: all 0.3s ease-in-out; 
} 
.search-wrapper.active .input-holder .search-icon { 
    width: 50px; 
    height:50px; 
    margin: 10px; 
    border-radius: 30px; 
} 
.search-wrapper .input-holder .search-icon span { 
    width:22px; 
    height:22px; 
    display: inline-block; 
    vertical-align: middle; 
    position:relative; 
    transform: rotate(45deg); 
    transition: all .4s cubic-bezier(0.650, -0.600, 0.240, 1.650); 
} 
.search-wrapper.active .input-holder .search-icon span { 
    transform: rotate(-45deg); 
} 
.search-wrapper .input-holder .search-icon span::before, .search-wrapper .input-holder .search-icon span::after { 
    position: absolute; 
    content:''; 
} 
.search-wrapper .input-holder .search-icon span::before { 
    width: 4px; 
    height: 11px; 
    left: 9px; 
    top: 18px; 
    border-radius: 2px; 
    background: #FE5F55; 
} 
.search-wrapper .input-holder .search-icon span::after { 
    width: 14px; 
    height: 14px; 
    left: 0px; 
    top: 0px; 
    border-radius: 16px; 
    border: 4px solid #FE5F55; 
} 
.search-wrapper .close { 
    position: relative; 
    z-index: 1; 
    top:24px; 
    right:20px; 
    width:25px; 
    height:25px; 
    cursor: pointer; 
    transform: rotate(-180deg); 
    transition: all .3s cubic-bezier(0.285, -0.450, 0.935, 0.110); 
    transition-delay: 0.2s; 
} 
.search-wrapper.active .close { 
    right:-50px; 
    transform: rotate(45deg); 
    transition: all .6s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
    transition-delay: 0.5s; 
} 
.search-wrapper .close::before, .search-wrapper .close::after { 
    position:absolute; 
    content:''; 
    background: #FE5F55; 
    border-radius: 2px; 
} 
.search-wrapper .close::before { 
    width: 5px; 
    height: 25px; 
    left: 10px; 
    top: 0px; 
} 
.search-wrapper .close::after { 
    width: 25px; 
    height: 5px; 
    left: 0px; 
    top: 10px; 
} 

Jede mögliche Hilfe bei diesem würde sehr geschätzt.

Antwort

2

function searchToggle(obj, evt){ 
 
    var container = $(obj).closest('.search-wrapper'); 
 
     if(!container.hasClass('active')){ 
 
      container.addClass('active'); 
 
      evt.preventDefault(); 
 
     } 
 
     else if(container.hasClass('active') && $(obj).closest('.input-holder').length == 0){ 
 
      container.removeClass('active'); 
 
      // clear input 
 
      container.find('.search-input').val(''); 
 
     } 
 
}
.search-wrapper { 
 
    position: relative; 
 
} 
 
.search-wrapper.active {} 
 

 
.search-wrapper .input-holder {  
 
    height: 70px; 
 
    width:70px; 
 
    overflow: hidden; 
 
    background: rgba(255,255,255,0); 
 
    border-radius:6px; 
 
    position: relative; 
 
    transition: all 0.3s ease-in-out; 
 
} 
 
.search-wrapper.active .input-holder { 
 
    width:450px; 
 
    border-radius: 50px; 
 
    background: rgba(0,0,0,0.5); 
 
    transition: all .5s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
} 
 
.search-wrapper .input-holder .search-input { 
 
    width:100%; 
 
    height: 50px; 
 
    padding:0px 70px 0 20px; 
 
    opacity: 0; 
 
    position: absolute; 
 
    top:0px; 
 
    left:0px; 
 
    background: transparent; 
 
    box-sizing: border-box; 
 
    border:none; 
 
    outline:none; 
 
    font-family:"Open Sans", Arial, Verdana; 
 
    font-size: 16px; 
 
    font-weight: 400; 
 
    line-height: 20px; 
 
    color:#FFF; 
 
    transform: translate(0, 60px); 
 
    transition: all .3s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
    transition-delay: 0.3s; 
 
} 
 
.search-wrapper.active .input-holder .search-input { 
 
    opacity: 1; 
 
    transform: translate(0, 10px); 
 
} 
 
.search-wrapper .input-holder .search-icon { 
 
    width:70px; 
 
    height:70px; 
 
    border:none; 
 
    border-radius:6px; 
 
    background: #000; 
 
    padding:0px; 
 
    outline:none; 
 
    position: relative; 
 
    z-index: 2; 
 
    float:right; 
 
    cursor: pointer; 
 
    transition: all 0.3s ease-in-out; 
 
} 
 
.search-wrapper.active .input-holder .search-icon { 
 
    width: 50px; 
 
    height:50px; 
 
    margin: 10px; 
 
    border-radius: 30px; 
 
} 
 
.search-wrapper .input-holder .search-icon span { 
 
    width:22px; 
 
    height:22px; 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
    position:relative; 
 
    transform: rotate(45deg); 
 
    transition: all .4s cubic-bezier(0.650, -0.600, 0.240, 1.650); 
 
} 
 
.search-wrapper.active .input-holder .search-icon span { 
 
    transform: rotate(-45deg); 
 
} 
 
.search-wrapper .input-holder .search-icon span::before, .search-wrapper .input-holder .search-icon span::after { 
 
    position: absolute; 
 
    content:''; 
 
} 
 
.search-wrapper .input-holder .search-icon span::before { 
 
    width: 4px; 
 
    height: 11px; 
 
    left: 9px; 
 
    top: 18px; 
 
    border-radius: 2px; 
 
    background: #FE5F55; 
 
} 
 
.search-wrapper .input-holder .search-icon span::after { 
 
    width: 14px; 
 
    height: 14px; 
 
    left: 0px; 
 
    top: 0px; 
 
    border-radius: 16px; 
 
    border: 4px solid #FE5F55; 
 
} 
 
.search-wrapper .close { 
 
    position: absolute; 
 
    z-index: 1; 
 
    top:24px; 
 
    left:20px; 
 
    width:25px; 
 
    height:25px; 
 
    cursor: pointer; 
 
    transform: rotate(-180deg); 
 
    transition: all .3s cubic-bezier(0.285, -0.450, 0.935, 0.110); 
 
    /*transition-delay: -0.2s;*/ 
 
} 
 
.search-wrapper.active .close { 
 
    left:475px; 
 
    transform: rotate(45deg); 
 
    transition: all .6s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
    /*transition-delay: 0.5s;*/ 
 
} 
 
.search-wrapper .close::before, .search-wrapper .close::after { 
 
    position:absolute; 
 
    content:''; 
 
    background: #FE5F55; 
 
    border-radius: 2px; 
 
} 
 
.search-wrapper .close::before { 
 
    width: 5px; 
 
    height: 25px; 
 
    left: 10px; 
 
    top: 0px; 
 
} 
 
.search-wrapper .close::after { 
 
    width: 25px; 
 
    height: 5px; 
 
    left: 0px; 
 
    top: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2> 
 
Testing Animated SearchBox 
 
</h2> 
 

 
<div class="search-wrapper"> 
 
    <div class="input-holder"> 
 
     <input type="text" class="search-input" placeholder="Type to search" /> 
 
     <button class="search-icon" onclick="searchToggle(this, event);"><span></span></button> 
 
    </div> 
 
    <span class="close" onclick="searchToggle(this, event);"></span> 
 
</div>

Sie benötigen top und left von Stil Suche Wrapper entfernen

prüfen JSFiddle here

+0

Die Position absolut ist .. Ich brauche es –

+0

relativ zu sein @BviLLe_Kid die aktualisierte Geige prüfen –

0

Sie müssen nur ein wenig

die Positionierung des Schließelements ändern

searchToggle = function searchToggle(obj, evt){ 
 
    var container = $(obj).closest('.search-wrapper'); 
 
     if(!container.hasClass('active')){ 
 
      container.addClass('active'); 
 
      evt.preventDefault(); 
 
     } 
 
     else if(container.hasClass('active') && $(obj).closest('.input-holder').length == 0){ 
 
      container.removeClass('active'); 
 
      // clear input 
 
      container.find('.search-input').val(''); 
 
     } 
 
}
h2{ 
 
    margin-bottom: 50px; 
 
} 
 

 
.search-wrapper { 
 
    position: relative; 
 
} 
 
.search-wrapper.active {} 
 

 
.search-wrapper .input-holder {  
 
    height: 70px; 
 
    width:70px; 
 
    overflow: hidden; 
 
    background: lightblue; 
 
    border-radius:6px; 
 
    position: relative; 
 
    transition: all 0.3s ease-in-out; 
 
} 
 
.search-wrapper.active .input-holder { 
 
    margin: auto; 
 
    width:450px; 
 
    border-radius: 50px; 
 
    background: lightgreen; 
 
    transition: all .5s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
} 
 

 
.search-wrapper .input-holder .search-input { 
 
    width:100%; 
 
    height: 50px; 
 
    padding:0px 70px 0 20px; 
 
    opacity: 0; 
 
    position: absolute; 
 
    top:0px; 
 
    left:0px; 
 
    background: transparent; 
 
    box-sizing: border-box; 
 
    border:none; 
 
    outline:none; 
 
    font-family:"Open Sans", Arial, Verdana; 
 
    font-size: 16px; 
 
    font-weight: 400; 
 
    line-height: 20px; 
 
    color: black; 
 
    transform: translate(0, 60px); 
 
    transition: all .3s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
    transition-delay: 0.3s; 
 
} 
 
.search-wrapper.active .input-holder .search-input { 
 
    opacity: 1; 
 
    transform: translate(0, 10px); 
 
} 
 
.search-wrapper .input-holder .search-icon { 
 
    width:70px; 
 
    height:70px; 
 
    border:none; 
 
    border-radius:6px; 
 
    background: black; 
 
    padding:0px; 
 
    outline:none; 
 
    position: relative; 
 
    z-index: 2; 
 
    float:right; 
 
    cursor: pointer; 
 
    transition: all 0.3s ease-in-out; 
 
} 
 
.search-wrapper.active .input-holder .search-icon { 
 
    width: 50px; 
 
    height:50px; 
 
    margin: 10px; 
 
    border-radius: 30px; 
 
} 
 
.search-wrapper .input-holder .search-icon span { 
 
    width:22px; 
 
    height:22px; 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
    position:relative; 
 
    transform: rotate(45deg); 
 
    transition: all .4s cubic-bezier(0.650, -0.600, 0.240, 1.650); 
 
} 
 
.search-wrapper.active .input-holder .search-icon span { 
 
    transform: rotate(-45deg); 
 
} 
 
.search-wrapper .input-holder .search-icon span::before, .search-wrapper .input-holder .search-icon span::after { 
 
    position: absolute; 
 
    content:''; 
 
} 
 
.search-wrapper .input-holder .search-icon span::before { 
 
    width: 4px; 
 
    height: 11px; 
 
    left: 9px; 
 
    top: 18px; 
 
    border-radius: 2px; 
 
    background: #FE5F55; 
 
} 
 
.search-wrapper .input-holder .search-icon span::after { 
 
    width: 14px; 
 
    height: 14px; 
 
    left: 0px; 
 
    top: 0px; 
 
    border-radius: 16px; 
 
    border: 4px solid #FE5F55; 
 
} 
 
.search-wrapper .close { 
 
    position: absolute; 
 
    z-index: 1; 
 
    top:24px; 
 
    left: 50%; 
 
    width:25px; 
 
    height:25px; 
 
    cursor: pointer; 
 
    transform: rotate(-180deg); 
 
    transition: all .3s cubic-bezier(0.285, -0.450, 0.935, 0.110); 
 
    transition-delay: 0.2s; 
 
} 
 
.search-wrapper.active .close { 
 
    left: calc(50% + 250px); 
 
    transform: rotate(45deg); 
 
    transition: all .6s cubic-bezier(0.000, 0.105, 0.035, 1.570); 
 
    transition-delay: 0.5s; 
 
} 
 
.search-wrapper .close::before, .search-wrapper .close::after { 
 
    position:absolute; 
 
    content:''; 
 
    background: #FE5F55; 
 
    border-radius: 2px; 
 
} 
 
.search-wrapper .close::before { 
 
    width: 5px; 
 
    height: 25px; 
 
    left: 10px; 
 
    top: 0px; 
 
} 
 
.search-wrapper .close::after { 
 
    width: 25px; 
 
    height: 5px; 
 
    left: 0px; 
 
    top: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2> 
 
Testing Animated SearchBox 
 
</h2> 
 

 
<div class="search-wrapper"> 
 
    <div class="input-holder"> 
 
     <input type="text" class="search-input" placeholder="Type to search" /> 
 
     <button class="search-icon" onclick="searchToggle(this, event);"><span></span></button> 
 
    </div> 
 
    <span class="close" onclick="searchToggle(this, event);"></span> 
 
</div>

+0

dies funktioniert, aber aus irgendeinem Grund in meinem eigenen Code, wenn ich die Eingabe beginnen in der Textbox .. I bekomme ein weißes 'x', das erscheint in der Mitte des Textfelds und nicht auf der rechten Seite .. und es erscheint nicht in dem von dir bereitgestellten Beispiel .. –

+0

auch mein Zeiger ist extrem glitschig, wenn er sich im Suchfeld befindet Nun .. erscheint, dann verschwindet .. erscheint ... dann verschwindet –

+0

Ich habe das erste Problem behoben .. Ich hatte eine 'max-width' auf Text-Bereichen ... aber wenn ich in das Textfeld klicke. Ich kann den blinkenden Cursor nicht sehen –