jquery .slideToggle() horizontal alternative?

JqueryHtmlToggleSlidetoggle

Jquery Problem Overview


slideToggle does exactly what I want, only I want the slide to be horizontal.

I now have an horizontalhide/show and animation on click, but I would like to have the toggle options. So that when I click on the active link, it will play the animation reversed and hide itself.

What would be the best way to do this?

Jquery Solutions


Solution 1 - Jquery

You can use the animate method:

$('#element').animate({width: 'toggle'});

http://jsfiddle.net/7ZBQa/

Solution 2 - Jquery

Created a fiddle http://jsfiddle.net/powtac/RqWk2/

$("div").animate({width: 'toggle'});

Solution 3 - Jquery

There is another way, to use jquery ui. See api jquery ui but it may not be always useful as it has its glitches

Here jsfiddle to see the glitch, it does not move all the rest elements smoothly. I put here code, but it should be used with jQuery UI 1.10.3.

js

$( document ).click(function() {
  $( "#toggle" ).toggle('slide');
});

css

.t {
    width: 100px;
    height: 100px;
    background: #ccc;
    display: inline-block;
    float: left;
  }

html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<p>Click anywhere to toggle the box.</p>
<div id="toggle" class='t'>1</div>
<div id="" class='t'>2</div>
<div class='t'>3</div>

Solution 4 - Jquery

i tried this, and works great!

html code:

<div class="flip-container" ontouchstart="this.classList.toggle('hover');">
	<div class="flipper">
		<div class="front">
			<!-- front content -->
		</div>
		<div class="back">
			<!-- back content -->
		</div>
	</div>
</div>

The CSS /* flip the pane when hovered */ .flip-container:hover .flipper, .flip-container.hover .flipper { transform: rotateY(180deg); }

.flip-container, .front, .back {
	width: 320px;
	height: 480px;
}

/* flip speed goes here */
.flipper {
	transition: 0.6s;
	transform-style: preserve-3d;

	position: relative;
}

/* hide back of pane during swap */
.front, .back {
	backface-visibility: hidden;

	position: absolute;
	top: 0;
	left: 0;
}

/* front pane, placed above back */
.front {
	z-index: 2;
	/* for firefox 31 */
	transform: rotateY(0deg);
}

/* back, initially hidden pane */
.back {
	transform: rotateY(180deg);
}

i use this inside a bootstrap col-sm-* and works great too

 <div class="col-sm-4 flip-container" ontouchstart="this.classList.toggle('hover');">
                	<div class="content-box flipper">
                    	<div class="content-box-front">
							<span class="glyphicon glyphicon-envelope content-box-icon"></span>
                    		<h4>Share your emotions</h4>
						</div>
                        <div class="content-box-back">
                        	<p>Share emotions with friends, family and teammates.</p>
                            <button>Read more</button>
                        </div>
                    </div>
                </div>

the css

.content-box
{
	position: relative;
	text-align: center;
	height: 105px;
	width: 100%;
}
.content-box-icon
{
	font-size: 30px;
	width: 60px;
	height: 60px;
	line-height: 60px;
	border-radius: 50%;
	text-align: center;
	display: block;
	margin: 5px auto 15px auto;
	color: #fff;
	float: none; 
	background:#25acfd                     
}
.content-box-front
{
	z-index: 2;
	/* for firefox 31 */
	transform: rotateY(0deg);
	backface-visibility: hidden;
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 105px;
}
.content-box-back
{
	transform: rotateY(180deg);
	backface-visibility: hidden;
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 105px;
}
/* entire container, keeps perspective */
	/* flip the pane when hovered */
	.flip-container:hover .flipper, .flip-container.hover .flipper {
		transform: rotateY(180deg);
	}

/* flip speed goes here */
.flipper {
	transition: 0.6s;
	transform-style: preserve-3d;
	position: relative;
}

Solution 5 - Jquery

If you needed it to be continuous, you can set up setTimeinterval as follows

<?php
setInterval(function (){
$('div').animate({width: 'toggle'});
},200);
?>

Solution 6 - Jquery

If you wish to toggle between two width's you could do something like below :

$('#A').click(function(){
if($(this).width() > 20){
$(this).animate({width: '20px'})
}
else{
$(this).animate({width: '50%'})
}
});

#A{
  float:left;
  width:50%;
  height:300px;
  background:red;
}
#B{
  min-height:300px;
  background:green;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="A">
</div>
<div id="B">
<span>Some stuff</span>
</div>

Solution 7 - Jquery

I wanted the Height to toggle so I used(I used in my project)

function show_hide(target){
 var x = document.querySelectorAll("." +target);
 var y = $( x ).next()
 $(y).animate({height: 'toggle'});
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThomasCSView Question on Stackoverflow
Solution 1 - JqueryRamView Answer on Stackoverflow
Solution 2 - JquerypowtacView Answer on Stackoverflow
Solution 3 - JqueryYevgeniy AfanasyevView Answer on Stackoverflow
Solution 4 - JqueryAlexandre RibeiroView Answer on Stackoverflow
Solution 5 - JquerykimoduorView Answer on Stackoverflow
Solution 6 - JquerysjsamView Answer on Stackoverflow
Solution 7 - Jquerysafeer008View Answer on Stackoverflow