I Have created a More/Less toggle button for which I have used https://jadepuma.com/blogs/blog/more-less-toggles-for-shopify-descriptions.
It works, but want to create a transition. When click read more button, it slowly opens the rest of the content. And click read less it slowly shuts.
This is what I am after, when button is toggled, it slowly reveals and closes the content: codepen.io/royketelaar/pen/avWxve
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> $( ".product-description-full" ).hide(); $( document ).ready(function() { $('.readmore').click(function (event) { event.preventDefault(); var descriptionFull = document.querySelector('.product-description-full'); descriptionFull.style.display = 'block'; var descriptionShort = document.querySelector('.product-description-short'); descriptionShort.style.display = 'none'; }); $('.readless').click(function (event) { event.preventDefault(); var descriptionFull = document.querySelector('.product-description-full'); descriptionFull.style.display = 'none'; var descriptionShort = document.querySelector('.product-description-short'); descriptionShort.style.display = 'block'; }); }); </script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <h2>This is a read more/less button demo</h2> <p>This paragraph is above the read more/less button. </p> <div class="product-description-short lessmore"><a href="#" class="readmore">Read More</a></div> <div class="product-description-full"> <h3>This header is below the read more button</h3> <p>This paragraph is below the read more button. This is text to fill in space</p> <div class="lessmore"><a href="#" class="readless">Read Less</a></div> </div>
Advertisement
Answer
$( ".product-description-full" ).hide(); $( document ).ready(function() { $('.readmore').click(function (event) { event.preventDefault(); var descriptionFull = document.querySelector('.product-description-full'); $(descriptionFull).show(500, 'swing'); var descriptionShort = document.querySelector('.product-description-short'); $(descriptionShort).hide(500, 'swing'); }); $('.readless').click(function (event) { event.preventDefault(); var descriptionFull = document.querySelector('.product-description-full'); $(descriptionFull).hide(500, 'swing'); var descriptionShort = document.querySelector('.product-description-short'); $(descriptionShort).show(500, 'swing') }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <h2>This is a read more/less button demo</h2> <p>This paragraph is above the read more/less button. </p> <div class="product-description-short lessmore"><a href="#" class="readmore">Read More</a></div> <div class="product-description-full"> <h3>This header is below the read more button</h3> <p>This paragraph is below the read more button. This is text to fill in space</p> <div class="lessmore"><a href="#" class="readless">Read Less</a></div> </div>
The Hide/Show Functions
$(element).hide/show(time(optional), easing(optional), callback(optional))
If you ignore all of the arguments except element, the function will do the same thing as what you did. These arguments can support these values:
Argument | Supports(Depends on Browser) |
---|---|
element | variable/element from HTML document |
time | number of milliseconds / ‘fast’ / ‘slow’ |
easing | ‘linear’ / ‘swing’ |
callback | function/action to do after hide/show function finishes |
For example, this hide function
$("help-btn").hide(1000, 'linear');
will make a transition to hide the help button for 1 second at a constant speed.
While this show function
$("nav-bar").show(750, 'swing', function(){console.log("Transition Finished");});
will make a transition to show the navigation bar for 3/4 second at a slightly changing and easing speed. After the transition, it will write in the console “Transition Finished”.