Skip to content

enhancement/1 json carousel #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 28 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a7c1bde
Add instructions for running example locally
tyler-vs Dec 1, 2021
c9cd10b
Update HTML content
tyler-vs Dec 1, 2021
4690159
Update script
tyler-vs Dec 1, 2021
b2abea3
Update script comments
tyler-vs Dec 1, 2021
9e4973f
Move carousel initialization to index.html
tyler-vs Dec 1, 2021
ad3d35e
Add jsdocs to methods
tyler-vs Dec 1, 2021
2c492b6
Return if no value was passed for parameter
tyler-vs Dec 1, 2021
31c58c3
Update carousel empty element with more data- attributes for features
tyler-vs Dec 1, 2021
69da7ee
Add auto controls feature check
tyler-vs Dec 1, 2021
50facdf
Add renderAutoControls method
tyler-vs Dec 1, 2021
b9319d9
Remove commented out code
tyler-vs Dec 1, 2021
d0a0d41
Replace renderButtons with renderAutoControls
tyler-vs Dec 1, 2021
fff50f4
Uncomment fade related code in the JSON slider's constructor
tyler-vs Dec 1, 2021
052ed0c
Update styles with button and fade support
tyler-vs Dec 1, 2021
56d2377
Remove unnecessary code
tyler-vs Dec 1, 2021
fb61589
Update placeholder div element with data- attributes
tyler-vs Dec 1, 2021
d7e5203
Add support for captions
tyler-vs Dec 1, 2021
59fbb4f
Add support for pager
tyler-vs Dec 1, 2021
2f4c0d1
Add event listeners for "slide to" buttons
tyler-vs Dec 1, 2021
2efecd7
Fix left/prev button styles
tyler-vs Dec 1, 2021
d4b3ad1
Add inspiration section
tyler-vs Dec 10, 2021
c01cf75
Move slides variables
tyler-vs Dec 10, 2021
8440912
Add errors.js
tyler-vs Dec 10, 2021
e3852c3
Include errors.js to example
tyler-vs Dec 10, 2021
f5881f0
Throw custom error if no selector
tyler-vs Dec 10, 2021
5c7c356
Replace x with this.slides
tyler-vs Dec 10, 2021
007834c
Remove x variable
tyler-vs Dec 10, 2021
84837ea
Change new of showDivs method to showSlide
tyler-vs Dec 10, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,13 @@
w3school carousel

See how to build a [JavaScript carousel here](https://www.w3schools.com/howto/howto_js_slideshow.asp)

Run locally with `python -m SimpleHTTPServer 4000`.

Inspirations:

- [BXSlider](https://bxslider.com/install/)
- [Flickity](https://flickity.metafizzy.co/)
- [Bootstrap Carousel](https://getbootstrap.com/docs/5.1/components/carousel/#via-javascript)

https://codepen.io/tvs/pen/77d3abe973ed4c9f89caf373a5e38b6d?editors=1111
19 changes: 19 additions & 0 deletions errors.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* errors.js
*
*/

// Custom error
class InvalidSelectorError extends Error {
constructor(message) {
super(message);
this.name = "InvalidSelectorError";
}
}

class InvalidCSSNameError extends Error {
constructor(message) {
super(message);
this.name = "InvalidCSSNameError";
}
}
114 changes: 38 additions & 76 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>W3Schools Carousels</title>
<title>W3Schools JSON Carousels</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="wrap">
<h3>w3schools carousel</h3>
<p>See full <a href="https://www.w3schools.com/howto/howto_js_slideshow.asp">tutorial</a>.</p>
<div class="one">
<h3>Slider #1</h3>
<div class="carousel carousel--1" id="carousel--1" data-wrap="true" data-interval="2000">
Expand Down Expand Up @@ -81,81 +79,45 @@ <h3>Slide #5: <span>Drizzle</span></h3>

<div class="two">
<h3>Slider #2</h3>
<!-- <w3c-carousel-with-selects data-wrap="false" data-interval="4000"> -->
<div class="carousel carousel--2" id="carousel--2" data-wrap="false" data-interval="4000">
<div class="carousel-items">
<div class="carousel-item carousel-item--1">
<div class="carousel-item__inner">
<div class="carousel-item__box-ratio">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/orange-tree.jpg" alt="Orange tree" class="carousel-item__img">
</div>
<div class="carousel-item__caption">
<h3>Slide #1: <span>Oranges</span></h3>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Blanditiis iste consequatur quasi architecto deserunt illo similique quas ab odit sunt beatae repellendus hic qui, totam sit eum maxime nihil a.</p>
</div>
</div>
</div>
<div class="carousel-item carousel-item--2">
<div class="carousel-item__inner">
<div class="carousel-item__box-ratio">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/submerged.jpg" alt="Submerged" class="carousel-item__img">
</div>
<div class="carousel-item__caption">
<h3>Slide #2: <span>Submerged</span></h3>
<p>Corporis obcaecati atque eveniet natus in vero! Tempora iure, doloribus autem, cum blanditiis esse voluptatem fuga provident dicta culpa eligendi quaerat ut repudiandae ullam similique est dolore optio iusto. Ut?</p>
</div>
</div>
</div>
<div class="carousel-item carousel-item--3">
<div class="carousel-item__inner">
<div class="carousel-item__box-ratio">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/look-out.jpg" alt="Look out" class="carousel-item__img">
</div>
<div class="carousel-item__caption">
<h3>Slide #3: <span>Outlook</span></h3>
<p>Earum rerum nihil autem, quo iusto doloribus consequuntur, illum magni debitis inventore illo delectus odit praesentium sequi officia temporibus reiciendis suscipit atque sed excepturi velit. Sapiente quod beatae laboriosam dolores.</p>
</div>
</div>
</div>
<div class="carousel-item carousel-item--4">
<div class="carousel-item__inner">
<div class="carousel-item__box-ratio">

<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/one-world-trade.jpg" alt="" class="carousel-item__img">
</div>
<div class="carousel-item__caption">
<h3>Slide #4: <span>Building</span></h3>
<p>Libero praesentium repudiandae corrupti, ut ex explicabo minima id itaque! Deleniti corporis velit nostrum, repellendus perferendis dolore illum a maiores aperiam explicabo repellat, corrupti ad, dolorum unde eaque quibusdam! Quis.</p>
</div>
</div>
</div>
<div class="carousel-item carousel-item--5">
<div class="carousel-item__inner">
<div class="carousel-item__box-ratio">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/82/drizzle.jpg" alt="drizzle" class="carousel-item__img">

</div>
<div class="carousel-item__caption">
<h3>Slide #5: <span>Drizzle</span></h3>
<p>Numquam provident, dolor sint ea adipisci saepe tempore incidunt voluptas nulla vitae nesciunt laborum deserunt distinctio laboriosam culpa voluptates tenetur! Fuga perspiciatis amet quod quos eius recusandae vel? Ullam, commodi.</p>
</div>
</div>
</div>
</div>
<button class="button button--prev" data-slide="prev" title="Prev">&#10094;</button>
<button class="button button--next" data-slide="next" title="Next">&#10095;</button>
<!-- don't need the parent attributes -->
<button class="button button--indicator" data-slide-to="1">Slide to #1</button>
<button class="button button--indicator" data-slide-to="2">Slide to #2</button>
<button class="button button--indicator" data-slide-to="3">Slide to #3</button>
<button class="button button--indicator" data-slide-to="4">Slide to #4</button>
<button class="button button--indicator" data-slide-to="5">Slide to #5</button>

<button class="button button--play">Play</button>
<button class="button button--pause">Pause</button>
</div>
<div
class="carousel carousel--2"
id="carousel--2"
data-wrap="false"
data-interval="4000"
data-auto-controls="true"
data-fade="true"
data-captions="true"
data-pager="true"></div>
</div>
</div><!-- /.wrap -->
<script src="errors.js"></script>
<script src="index.js"></script>
<script>
document.addEventListener('DOMContentLoaded',function() {
// Initiate fist carousel
const carousel1 = new Carousel("#carousel--1");
// async function to get JSON data, run this before initiating a new carousel.
function getJson() {
return fetch("https://assets.codepen.io/307033/slides.json")
.then(function (response) {
// The API call was successful!
return response.json();
})
.then(function (data) {
// This is the JSON from our response
console.log(data);
return data.slides;
})
.catch(function (err) {
// There was an error
console.warn("Something went wrong.", err);
});
}
getJson().then((data) => {
console.log("data", data);
const carousel2 = new SuperJSONCarousel("#carousel--2", data);
});
});
</script>
</body>
</html>
Loading