Phantom
One day I found a interesting design from Dribbble. It is a carousel with phantom slide effect. I like that effect so much and wondering is it possible to wrap as a web component ? After a few survey with CSS mask and trigonometric function. All puzzle has been collect and resolved.
Allow me to introduce <msc-phantom />
for you.
<msc-phantom />
will show you interesting slide effect after some simple config setting. You could take a quick look in the following demo.
Basic Usage
<msc-phantom />
is a web component. All we need to do is put the required script into your HTML document. Then follow <msc-phantom />
's html structure and everything will be all set.
Required Script
<script async name="msc-phantom" src="https://your-domain//pack-loader.js" data-required="https://your-domain/class-msc-phantom.js,https://your-domain/wcl.js"> </script>
Structure
Here comes two init ways for different situations. Either way is fine, developers could pick one they like.
- Put the config inside <msc-phantom />
as its child. This one could be used for data has already collected. (such as server-side prepared)
<msc-phantom width="1.71" height="1" slide="1" duration="3000" direction="normal" autoplay> <script type="application/json"> { "width": 1.75, "height": 1, "slide": 1, "duration": 2000, "queue": [ { "img": "https://picsum.photos/id/1016/1050/600?grayscale", "loc": "#1", "target": "_blank", "aria-label": "msc-phantom #1", "alt": "photo #1016 from https://picsum.photos" }, { "img": "https://picsum.photos/id/1064/1050/600?grayscale", "loc": "#2", "target": "_blank" }, { "img": "https://picsum.photos/id/1076/1050/600?grayscale", "loc": "#3", "target": "_blank" } ] } </script> </msc-phantom>
- Client trigger. (need to prepare a web service for config fetch.)
Note: when init with this way, response data interface must follow <msc-phantom />
's format.
<msc-phantom width="1.71" height="1" config="your-web-service-address" > </msc-phantom>
Web Service response format
{ "width": 1.75, // optional "height": 1, // optional "slide": 1, // optional "duration": 2000, // optional (in milliseconds) "direction": "reverse", // optional "autoplay": true, // optional "queue": [ { "img": "https://picsum.photos/id/1016/1050/600?grayscale", "loc": "#1", "target": "_blank", "aria-label": "msc-phantom #1", // optional "alt": "photo #1016 from https://picsum.photos" // optional }, { "img": "https://picsum.photos/id/1064/1050/600?grayscale", "loc": "#2", "target": "_blank" }, { "img": "https://picsum.photos/id/1076/1050/600?grayscale", "loc": "#3", "target": "_blank" }, { "img": "https://picsum.photos/id/111/1050/600?grayscale", "loc": "#4", "target": "_blank" }, { "img": "https://picsum.photos/id/191/1050/600?grayscale", "loc": "#5", "target": "_blank" } ] }
The following <msc-phantom />
is client trigger demo.
Style Customization
<msc-phantom />
uses CSS variables to hook transition duration & indicator width. That means developer could easy change it into the lookup you like.
<style> msc-phantom { --transition-duration: 0.8s; --indicator-width: 32px; } </style>
Attributes
<msc-phantom />
supports some attribute to let it become more convenience & useful.
width
Set <msc-phantom />
's width ratio. Default is 1.
<msc-phantom width="1.71" height="1" > ... </msc-phantom>
height
Set <msc-phantom />
's height ratio. Default is 1.
<msc-phantom width="1.71" height="1" > ... </msc-phantom>
duration
Set <msc-phantom />
's cool time. This attribute will be active when autoplay is on. Default is 5000.(in milliseconds)
<msc-phantom duration="5000" > ... </msc-phantom>
direction
Set <msc-phantom />
's transition direction. Developers could select normal or reverse. Default is normal.
<msc-phantom direction="reverse" > ... </msc-phantom>
slide
Set <msc-phantom />
's current slide. Default is 1.
<msc-phantom slide="3" > ... </msc-phantom>
autoplay
Set <msc-phantom />
into autoplay mode or not.
<msc-phantom autoplay > ... </msc-phantom>
Properties
Property Name | Type | Description |
---|---|---|
width
|
Number | Getter / Setter for <msc-phantom /> 's width ratio. |
height
|
Number | Getter / Setter for <msc-phantom /> 's height ratio. |
duration
|
Number | Getter / Setter for <msc-phantom /> 's cool time (in milliseconds). Needs to work with autoplay. |
direction
|
String | Getter / Setter for <msc-phantom /> 's direction. Developers could set normal or reverse. |
slide
|
Number | Getter / Setter for <msc-phantom /> 's slide. <msc-phantom /> will slide to the value developer set. |
autoplay
|
Boolean | Getter / Setter for <msc-phantom /> 's autoplay mode. |
Mathod
Mathod Signature | Description |
---|---|
previous
|
Back to previous slide. |
next
|
Shift to next slide. |
Event
Event Signature | Description |
---|---|
phantom-indicator-clicked
|
Fired when phantom's indicator is clicked. |
phantom-clicked
|
Fired when phantom is clicked. |
phantom-viewed
|
Fired when phantom's element is display. |