- ' + toc + '
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Browser Compatibility
-Supported Browsers
-Smooth Scroll works in all modern browsers, and IE 9 and above.
-Smooth Scroll is built with modern JavaScript APIs, and uses progressive enhancement. If the JavaScript file fails to load, or if your site is viewed on older and less capable browsers, anchor links will jump the way they normally would.
-- - -
Known Issues
-<body> styling
-If the <body> element has been assigned a height of 100% or overflow: hidden, Smooth Scroll is unable to properly calculate page distances and will not scroll to the right location. The <body> element can have a fixed, non-percentage based height (ex. 500px), or a height of auto, and an overflow of visible.
Animating from the bottom
-Animated scrolling links at the very bottom of the page (example: a "scroll to top" link) will stop animated almost immediately after they start when using certain easing patterns. This is an issue that's been around for a while and I've yet to find a good fix for it. I've found that easeOut* easing patterns work as expected, but other patterns can cause issues. See this discussion for more details.
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Extras
-Frequently asked questions, code snippets, and more to help you get the most out of Smooth Scroll.
-- -
Scrolling to an anchor link on another page
-This, unfortunately, cannot be done well.
-Most browsers instantly jump you to the anchor location when you load a page. You could use scrollTo(0, 0) to pull users back up to the top, and then manually use the smoothScroll.animateScroll() method, but in my experience, it results in a visible jump on the page that's a worse experience than the default browser behavior.
- -
Scrolling without updating the URL
-Smooth Scroll is designed to progressively enhance anchor links while offloading as much to the browser as possible. In it's current implementation, it relies on hashchange events (which occur whenever a # changes in the URL) to trigger the scrolling behavior.
A benefit of this approach is that it preserves browser history and let's users navigate between anchors with the forward and back buttons on the browsers, just like you would normally.
-However, I know certain front-end frameworks also use URL hashes for their own internal processes. While I view this as an anti-pattern, and won't bake hashless anchor links into Smooth Scroll's core, you can enable scrolling without updating the URL via the Smooth Scroll API.
-Here's a relatively lightweight helper function that listens for click events and uses the smoothScroll.animateScroll() method to scroll to the anchor. If you use this, you should not need initialize Smooth Scroll with smoothScroll.init().
var smoothScrollWithoutHash = function (selector, settings) {
-
- /**
- * Get the closest matching element up the DOM tree.
- * @private
- * @param {Element} elem Starting element
- * @param {String} selector Selector to match against
- * @return {Boolean|Element} Returns null if not match found
- */
- var getClosest = function ( elem, selector ) {
-
- // Element.matches() polyfill
- if (!Element.prototype.matches) {
- Element.prototype.matches =
- Element.prototype.matchesSelector ||
- Element.prototype.mozMatchesSelector ||
- Element.prototype.msMatchesSelector ||
- Element.prototype.oMatchesSelector ||
- Element.prototype.webkitMatchesSelector ||
- function(s) {
- var matches = (this.document || this.ownerDocument).querySelectorAll(s),
- i = matches.length;
- while (--i >= 0 && matches.item(i) !== this) {}
- return i > -1;
- };
- }
-
- // Get closest match
- for ( ; elem && elem !== document; elem = elem.parentNode ) {
- if ( elem.matches( selector ) ) return elem;
- }
-
- return null;
-
- };
-
-
- /**
- * If smooth scroll element clicked, animate scroll
- * @private
- */
- var clickHandler = function (event) {
- var toggle = getClosest( event.target, selector );
- console.log(toggle);
- if ( !toggle || toggle.tagName.toLowerCase() !== 'a' ) return;
- console.log(toggle.hash);
- var anchor = document.querySelector( toggle.hash );
- if ( !anchor ) return;
-
- event.preventDefault(); // Prevent default click event
- smoothScroll.animateScroll( anchor, toggle, settings || {} ); // Animate scroll
- };
-
- window.addEventListener('click', clickHandler, false );
-
-};
-
-// Run our function
-smoothScrollWithoutHash( 'a[href*="#"]' );
-
-
-
-
-
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Smooth Scroll
-Smooth Scroll is a lightweight script to animate scrolling to anchor links. It works great with Gumshoe.
-- -
Demo
-
- Linear
- Linear (no other options)
-
- Ease-In
- Quad
- Cubic
- Quart
- Quint
-
- Ease-In-Out
- Quad
- Cubic
- Quart
- Quint
-
- Ease-Out
- Quad
- Cubic
- Quart
- Quint
-
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
-
- Non-ASCII Characters
- ä¸ć–‡
-
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
-
ä¸ć–‡
- - - -
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
- .
.
.
.
.
.
.
.
.
.
.
.
.
-
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-License
-Smooth Scroll has three types of licenses:
--
-
- Open Source, for personal and open source projects. -
- Commercial, for commercial projects and applications. -
- OEM, for when this Smooth Scroll will be bundled with a commercial interface builder, SDK, or toolkit. -
- - -
Open Source License
-If you're looking to use Smooth Scroll on an open source or personal project, the code is available under the GPLv3 License. GPLv3 has many terms, but the most important one is that it requires you to license you entire project under the terms of GPLv3 as well:
---You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.
-
You can absolutely use the open source license for commercial projects, but those projects must also be open sourced in their entirety with a GPLv3 license.
-- - -
Commercial License
-The Commercial License let's you use Smooth Scroll in commercial projects and applications without the provisions of GPLv3. With this license, your code is kept proprietary.
--
-
- You can modify the source code. -
- You can include it in your own commercial products and applications, such as premium CMS themes, plugins, or templates. -
- Customers and users of your products do not need to purchase their own license, as long as they're not developing their own commercial products with Smooth Scroll. -
Buy a Commercial License
-Commercial Licenses are priced based on the number of websites, applications, or other products that use Smooth Scroll. Pay with credit card and instantly receive a PDF of your Commercial License.
-| Description | -Price | -
|---|---|
| 1 Site or App | -Buy a 1 Site License now for $29 | -
| 5 Sites or Apps | -Buy a 5 Site License now for $59 | -
| 25 Sites or Apps | -Buy a 25 Site License now for $119 | -
You can read the full text of the Commercial License below. Email me at chris@gomakethings.com with any questions you have about licensing.
-The Commercial License Agreement
-This Software License Agreement (the “Agreement”) is between Go Make Things, LLC (“Go Make Things”) and You (including your agents and affiliates), a commercial licensee of Go Make Things's software. If you have not purchased a Smooth Scroll Commercial License from Go Make Things, these terms do not apply to you, and your use of the Go Make Things software is instead governed by the GNU General Public License, version 3.
-1. Definitions
--
-
- “Application” means any software, application, or elements that Your Licensed Developers develop using the Software or Modifications in accordance with this Agreement. -
- “End User” means an end user of Your Application who acquires a license to such solely for their own use and not for distribution, resale, user interface design, or software development purposes. -
- “Licensed Developer” shall mean an individual person permitted to use the Software and make Modifications for your Applications, whether such person is Your employee or a consultant or contractor providing services to You. -
- “Modification” means any revision, adaptation, or derivative of the Software produced by You. -
- The “Software” means Smooth Scroll version 11. -
2. Commercial license grant
-Subject to the terms of this Agreement, Go Make Things grants to You a revocable, non-exclusive, non-transferable license:
--
-
- for Licensed Developers to use the Software to create Modifications and [n—varies based on the license you purchase] Applications; -
- for You to distribute the Software and/or Modifications to an unlimited number of End Users solely as integrated into the Applications; -
- and for End Users to use the Software as incorporated into Your Applications in accordance with the terms of this Agreement. -
You are entitled to receive all updates to the major version of the Software licensed by you, as well as any later version of the Software that Go Make Things, in writing, explicitly authorizes you to use. (For illustration purposes only, if you purchased a license for version 2.0, this licenses authorizes you to use version 2.9, but not 3.0.) Go Make Things makes no representation that any update will be compatible with your Application.
-3. Ownership
-This is a license agreement and not an agreement for sale. Go Make Things reserves ownership of all intellectual property rights inherent in or relating to the Software and corresponding source code, which include all copyright, patent rights, all rights in relation to registered and unregistered trademarks (including service marks), confidential information (including trade secrets and know-how) and all rights other than those expressly granted by this Agreement.
-You must not remove, obscure or interfere with any copyright, acknowledgment, attribution, trademark, warning or disclaimer statement affixed to, incorporated in or otherwise applied in connection with the Software. Notwithstanding the above, you are permitted to produce, use, and distribute compressed or “minified” copies of the Software that do not bear the notices contained in the Software’s source code, so long as you otherwise comply with the terms of this license.
-4. Prohibited Uses
-Your Application must have substantially different functionality than, and must not compete directly with, the Software.
-You may not distribute the Software or Modifications except as included within Your Application.
-If You produce an Application for a customer, You are responsible for ensuring that your customer does not make use of the Software except with Applications licensed herein.
-Your Application must not enable End Users to produce separate applications that incorporate the Software or Modifications. For example, if Your Application is a development toolkit or library, an application builder, a website builder that can be used to incorporate the Software into a new Application, You must obtain a separate OEM license from Go Make Things.
-5. Termination
-This Agreement and the license granted hereunder shall continue until terminated in accordance with this Section. Unless otherwise specified in this Agreement, the license shall last as long as Your use of the Software is in compliance with the terms herein.
-Go Make Things shall have the right to terminate this Agreement and the license granted hereunder immediately if You breach any of the material terms of this Agreement. Upon termination of this Agreement, all licenses granted to You in this Agreement shall terminate automatically and You shall immediately cease use and distribution of the Software.
-Upon termination of this Agreement, You must cease all use of the Software. If, prior to your breach of this Agreement, you delivered Applications incorporating the Software to Your End Users, those End Users’ licenses shall survive termination.
-6. Disclaimer of Warranties
-TO THE EXTENT PERMITTED BY LAW, GO MAKE THINGS DISCLAIMS ALL WARRANTIES AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT, WITH REGARD TO THE SOFTWARE. WE DO NOT GUARANTEE THAT THE OPERATION OF THE SOFTWARE OR YOUR APPLICATION WILL BE UNINTERRUPTED OR ERROR-FREE, AND YOU ACKNOWLEDGE THAT IT IS NOT TECHNICALLY PRACTICABLE FOR US TO DO SO.
-7. Limitation of Liabilities
-TO THE EXTENT PERMITTED BY LAW, IN NO EVENT SHALL GO MAKE THINGS BE LIABLE UNDER ANY LEGAL OR EQUITABLE THEORY FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LAW) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE OR THE CODE IT PRODUCES OR ANY OTHER SUBJECT MATTER RELATING TO THIS AGREEMENT, EVEN IF GO MAKE THINGS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN ANY CASE, GO MAKE THINGS’S ENTIRE LIABILITY WITH RESPECT TO ANY SUBJECT MATTER RELATING TO THIS AGREEMENT SHALL BE LIMITED TO THE GREATER OF: (I) THE AMOUNT ACTUALLY PAID BY YOU FOR THE LICENSE, OR (II) FIVE HUNDRED DOLLARS ($500).
-8. Indemnification
-While redistributing the Software or Modifications thereof as part of Your Application, You may choose to offer acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this Agreement. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, and not on Go Make Things’s behalf.
-You agree to indemnify, hold harmless, and defend Go Make Things and its owners, officers, agents, and affiliates from and against any and all claims, lawsuits and proceedings (collectively “Claims”), and all expenses, costs (including attorney's fees), judgments, damages and other liabilities resulting from such Claims, that arise or result from:
--
-
- your use of the Software in violation of this Agreement; -
- the use or distribution of Your Application, except to the extent such claim is based solely on the inclusion of the Software therein; -
- your Modification of the Software’s source code; or -
- your accepting support, warranty, indemnity, or additional liability as described in the preceding paragraph. -
9. Payment and Taxes
-All payments under this Agreement are due to Go Make Things upon Your purchase of a license to the Software.
-Each party shall be responsible for all taxes (including, but not limited to, taxes based upon its income) or levies imposed on it under applicable laws, regulations and tax treaties as a result of this Agreement and any payments made hereunder (including those required to be withheld or deducted from payments); provided that You shall be responsible for any value added tax, use tax, sales tax, or similar tax, and shall pay or reimburse Go Make Things for the same upon invoice. Each party shall furnish evidence of such paid taxes as is sufficient to enable the other party to obtain any credits available to it, including original tax withholding certificates.
-10. Miscellaneous
-Software Updates and Upgrades. The license granted herein applies only to the version of the Software available when purchased in connection with the terms of this Agreement, and to any updates and/or upgrades to which You may be entitled. Any previous or subsequent license granted to You for use of the Software shall be governed by the terms and conditions of the agreement entered in connection with purchase or download of that version of the Software.
-Survival. The provisions of sections 4 through 10 will survive termination of this Agreement.
-Compliance with Applicable Laws. You agree that You will comply with all applicable laws and regulations with respect to the Software, including without limitation all export control laws and regulations.
-Marketing. You agree to Go Make Things’s use of Your name, trade name, and trademark, for use in Go Make Things’s marketing materials and its website, solely to identify you as a customer of Go Make Things.
-Assignment. This Agreement may be assigned by Go Make Things in whole or in part and will inure to the benefit of Go Make Things’s successors and assigns. You may not assign or transfer this Agreement without Go Make Things’s prior written consent. Notwithstanding the foregoing, however, if You transfer ownership of an Application to a customer for which it was developed, You may assign this Agreement to that customer (the “Assignee”) provided:
--
-
- You provide written notice to Go Make Things prior to the effective date of such assignment; and -
- there is a written agreement, wherein the Assignee accepts the terms of this Agreement. -
Entire Agreement. The terms and conditions stated herein set forth the entire agreement of the parties and replace and supersede all other contracts, agreements, and understandings, written or oral, relating to the subject matter hereof.
-Severability. In the event that any portion of this Agreement is held to be unenforceable, such portions shall not limit or otherwise modify or affect any other portion of this Agreement.
-Modification; Waiver. This Agreement cannot be amended except by a written instrument executed by Go Make Things.

 All Additional Terms are hereby incorporated into this Agreement by this reference.

 The failure of Go Make Things to enforce any provision of this Agreement may not be deemed a waiver of that or any other provision of this Agreement.
-Governing Law. This Agreement is subject to, and shall be interpreted and enforced in accordance with, the laws of the Commonwealth of Massachusetts in all respects without regard to conflict of law principles. The Courts of Bristol County, Massachusetts and Norfolk County, Massachusetts shall be the sole and exclusive Courts in which either party may attempt to enforce or establish the existence or scope of any rights, benefits or obligations under this Agreement. The UN Convention on Contracts for the International Sale of Goods is expressly excluded.
-Government Use. If the Software or any related documentation is licensed to the U.S. Government or any agency thereof, it will be considered to be “commercial computer software” or “commercial computer software documentation,” as those terms are used in 48 CFR § 12.212 or 48 CFR § 227.7202, and is being licensed with only those rights as are granted to all other licensees as set forth in this Agreement.
-- - -
OEM License
-If you'll be including Smooth Scroll in a project that can be used to build new products, websites, or applications—such as a commercial interface builder, SDK, or toolkit—you need to purchase an OEM License.
-The OEM License is customized for you. Please content me chris@gomakethings.com to discuss your project.
- - - -
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Options and Settings
-Smooth Scroll includes smart defaults and works right out of the box. But if you want to customize things, it also has a robust API that provides multiple ways for you to adjust the default options and settings.
-- -
Global Settings
-You can pass options and callbacks into Smooth Scroll through the init() function:
smoothScroll.init({
- // Selectors
- selector: '[data-scroll]', // Selector for links (must be a valid CSS selector)
- ignore: '[data-scroll-ignore]' // Selector to ignore (won't animate scrolling on links with this selector)
- selectorHeader: null, // Selector for fixed headers (must be a valid CSS selector) [optional]
-
- // Speed & Easing
- speed: 500, // Integer. How fast to complete the scroll in milliseconds
- offset: 0, // Integer or Function returning an integer. How far to offset the scrolling anchor location in pixels
- easing: 'easeInOutCubic', // Easing pattern to use
-
- // Custom easing patterns.
- // Must be an object with the easing name as the key
- // Each pattern must be a function, with `time` as the argument, that returns the pattern
- easingPatterns: {
- myCustomEasingPattern: function (time) {
- return time * (2 - time);
- }
- }
-
- // Callback API
- before: function (anchor, toggle) {}, // Function to run before scrolling starts
- after: function (anchor, toggle) {} // Function to run after scrolling completes
-});
-
-Note: To programatically add Smooth Scroll to all anchor links on a page, pass selector: 'a[href*="#"]' into init.
Easing Options
-Linear -Moves at the same speed from start to finish.
--
-
Linear
-
Ease-In -Gradually increases in speed.
--
-
easeInQuad
-easeInCubic
-easeInQuart
-easeInQuint
-
Ease-In-Out -Gradually increases in speed, peaks, and then gradually slows down.
--
-
easeInOutQuad
-easeInOutCubic
-easeInOutQuart
-easeInOutQuint
-
Ease-Out -Gradually decreases in speed.
--
-
easeOutQuad
-easeOutCubic
-easeOutQuart
-easeOutQuint
-
Learn more about the different easing patterns and what they do at easings.net.
-- - -
Override settings with data attributes
-Smooth Scroll also lets you override global settings on a link-by-link basis using the [data-options] data attribute.
<a data-scroll
- data-options='{
- "speed": 500,
- "easing": "easeInOutCubic",
- "offset": 0
- }'
->
- Anchor Link
-</a>
-
-Note: You must use valid JSON in order for the data-options feature to work. Does not support the before and after callback methods, or the easingPatterns object.
- - -
Use Smooth Scroll events in your own scripts
-You can also call Smooth Scroll's scroll animation events in your own scripts.
-animateScroll()
-Animate scrolling to an anchor.
-smoothScroll.animateScroll(
- anchor, // Node to scroll to, OR an integer. ex. document.querySelector( '#bazinga' )
- toggle, // Node that toggles the animation. ex. document.querySelector( '#toggle' )
- options // Classes and callbacks. Same options as those passed into the init() function.
-);
-
-Example 1
-var anchor = document.querySelector( '#bazinga' );
-smoothScroll.animateScroll( anchor );
-
-Example 2
-var anchor = document.querySelector( '#bazinga' );
-var toggle = document.querySelector('#toggle');
-var options = { speed: 1000, easing: 'easeOutCubic' };
-smoothScroll.animateScroll( anchor, toggle, options );
-
-Example 3
-// You can optionally pass in a y-position to scroll to as an integer
-smoothScroll.animateScroll( 750 );
-
-destroy()
-Destroy the current smoothScroll.init(). This is called automatically during the init function to remove any existing initializations.
smoothScroll.destroy();
-
-- - -
Fixed Headers
-If you're using a fixed header, Smooth Scroll will automatically offset scroll distances by the header height. Pass in a valid CSS selector for your fixed header as an option to the init.
If you have multiple fixed headers, pass in the last one in the markup.
-<nav data-scroll-header>
- ...
-</nav>
-...
-<script>
- smoothScroll.init({
- selectorHeader: '[data-scroll-header]'
- });
-</script>
-
-
-
-
-
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Getting Started
-Compiled and production-ready code can be found in the dist directory. The src directory contains development code.
- -
Quick Start
-1. Include Smooth Scroll on your site.
-<script src="dist/js/smooth-scroll.js"></script>
-
-2. Add the markup to your HTML.
-Turn anchor links into Smooth Scroll links by adding the [data-scroll] data attribute. Give the anchor location an ID just like you normally would.
<a data-scroll href="#bazinga">Anchor Link</a>
-...
-<span id="bazinga">Bazinga!</span>
-
-3. Initialize Smooth Scroll.
-In the footer of your page, after the content, initialize Smooth Scroll. And that's it, you're done. Nice work!
-<script>
- smoothScroll.init();
-</script>
-
-- -
Using a Package Manager
-Install Smooth Scroll with your favorite package manager or module bundler directly from NPM.
-npm install smooth-scroll
-
-- - -
Working with the Source Files
-If you would prefer, you can work with the development code in the src directory using the included Gulp build system. This compiles, lints, and minifies code.
Dependencies
-Make sure these are installed first.
- -Using Gulp
--
-
- In bash/terminal/command line,
cdinto your project directory.
- - Run
npm installto install required files.
- - When it's done installing, run one of the task runners to get going:
-
-
gulpmanually compiles files.
-gulp watchautomatically compiles files when changes are made and applies changes using LiveReload.
-
-
Compiled and production-ready code can be found in the dist directory. The src directory contains development code.
-
-
- Smooth Scroll
-
-
- GPLv3/Commercial License
- Version 11
-
Want to learn how to write your own vanilla JS plugins? Get my free daily developer tips and level-up as a web developer. 🚀
-Support
-If you're having issues with Smooth Scroll, there are a few ways to get help.
-- - -
Community Support
-You can ask questions and get help from a community of developers on GitHub Issues.
-Before posting, do a search to make sure your issue or questions hasn't already been reported or discussed. If no matching issue exists, go ahead and create one. Please be sure to include all of the following:
--
-
- A clear, descriptive title (ie. "A bug" is not a good title). -
- A reduced test case.
-
-
- Clearly demonstrate the bug or issue. -
- Include the bare minimum HTML, CSS, and JavaScript required to demonstrate the bug. -
- A link to your production site is not a reduced test case. -
- - The browser and OS that you're using. -
Duplicates and issues without a reduced test case may be closed without comment.
-- - -
Premium Support
-Premium Support gives your direct access to me by email to answer any specific questions or issues you have.
- -- - -
Custom Support
-If you want to customize Smooth Scroll to better meet your needs, I can help. Send me an email at chris@gomakethings.com with the details.
-- - -
Feature Requests
-Please post feature requests on GitHub Issues and clearly mark it as a feature request. Provide as much detail as you can.
-If there's a feature listed there already that you'd like to see incorporated into the plugin, add your support.
- - - -
+ Linear
+ Linear (no other options)
+
+ Ease-In
+ Quad
+ Cubic
+ Quart
+ Quint
+
+ Ease-In-Out
+ Quad
+ Cubic
+ Quart
+ Quint
+
+ Ease-Out
+ Quad
+ Cubic
+ Quart
+ Quint
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ Non-ASCII Characters
+ ä¸ć–‡
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ ä¸ć–‡ + More Special Characters +
+ +
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
myymälä
+ +
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+ .
.
.
.
.
.
.
.
.
.
.
.
.
+
.
.
.
.
.