iwmlib/lib/flippable.html

98 lines
3.9 KiB
HTML
Raw Normal View History

2019-03-21 09:57:27 +01:00
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Flippable Doctest</title>
2019-05-22 16:03:19 +02:00
<link rel="stylesheet" href="./3rdparty/highlight/styles/default.css">
2019-03-21 09:57:27 +01:00
<link rel="stylesheet" href="../css/doctest.css">
2019-05-22 16:03:19 +02:00
<script src="./3rdparty/highlight/highlight.pack.js"></script>
<script src="../dist/iwmlib.3rdparty.js"></script>
<script src="../dist/iwmlib.js"></script>
2019-03-21 09:57:27 +01:00
<link rel="stylesheet" href="../css/flipeffect.css">
<template id="flipTemplate">
<div class="flipWrapper">
<div class="flipCard">
<div class="flipFace front"></div>
<div class="flipFace back" style="visibility:hidden;"></div>
</div>
<!-- Very tricky problem to scale svgs: see https://css-tricks.com/scale-svg/ -->
2023-05-04 13:28:58 +02:00
<!-- SVG viewPort interferes with DOMMatrix calculations: see
https://stackoverflow.com/questions/70696387/how-to-get-transform-matrix-of-a-dom-element-->
<div class="flipButton backBtn" style="visibility:hidden;">
<svg viewBox="0 0 100 100" preserveAspectRatio="xMidYMid meet" style="width:inherit; height:inherit;">
<g stroke-width="8" stroke="white">
<circle cx="50" cy="50" r="44" fill="gray" />
<line x1="30" y1="30" x2="70" y2="70" />
<line x1="30" y1="70" x2="70" y2="30" />
</g>
</svg>
</div>
2019-03-21 09:57:27 +01:00
2023-05-04 13:28:58 +02:00
<div class="flipButton infoBtn">
<svg viewBox="0 0 100 100" preserveAspectRatio="xMidYMid meet" style="width:inherit; height:inherit;">
<circle cx="50" cy="50" r="44" stroke="white" stroke-width="8" fill="gray" />
<circle cx="50" cy="32" r="7" fill="white" />
<line x1="50" y1="46" x2="50" y2="78" stroke="white" stroke-width="12" />
</svg>
</div>
2019-03-21 09:57:27 +01:00
</div>
</template>
</head>
<body onload="Doctest.run()">
<h1>
Flippable
</h1>
<p>
The flip effect simulates a flip between a front and back view of an object
by means of a 3D rotation. The DOMFlippable class implements this effect for two
DOM nodes, one as the front view, the other as the back view. Both views are connected
via a HTML template that defines the placeholders for front and back views. The
style file "css/flipeffect.css" holds reasonable default styles for this kind of
templates.
</p>
2023-05-04 13:28:58 +02:00
<p>
The SVG buttons have to be wrapped in an HTML DOM element which handles events. Otherwise,
the viewbox of the SVG will interfere with the coordinate transformation.
</p>
2019-03-21 09:57:27 +01:00
<pre><code>
&lt;template id="flipTemplate"&gt;
&lt;div class="flipWrapper"&gt;
&lt;div class="flipCard"&gt;
&lt;div class="flipFace front"&gt;&lt;/div&gt;
&lt;div class="flipFace back" style="visibility:hidden;"&gt;&lt;/div&gt;
&lt;/div>
&lt;svg class="flipButton backBtn" .../&gt;
&lt;svg class="flipButton infoBtn" .../&gt;
&lt;/div&gt;
&lt;/template&gt;
</code>
</pre>
<h3>
Example
</h3>
<main id="main" style="border: 1px solid gray; position: relative; height: 256px;" >
</main>
<script class="doctest">
2019-07-05 09:34:22 +02:00
let scatterContainer = new DOMScatterContainer(main, {stopEvents: false})
2019-03-21 09:57:27 +01:00
if (Capabilities.supportsTemplate()) {
2019-07-12 14:33:15 +02:00
2019-03-21 09:57:27 +01:00
let flip = new DOMFlip(scatterContainer,
flipTemplate,
new ImageLoader('./examples/king.jpeg'),
new ImageLoader('./examples/women.jpeg'),
2019-10-02 14:09:09 +02:00
{ tapDelegateFactory: CardWrapper, preloadBack: true})
2019-03-21 09:57:27 +01:00
flip.load().then((flip) => {
flip.centerAt({ x: 150, y: 120})
})
}
else {
alert("Templates not supported, use Edge, Chrome, Safari or Firefox.")
}
</script>
</body>