<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://daddyissusa.rusff.me/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>DADDY ISSUES</title>
		<link>https://daddyissusa.rusff.me/</link>
		<description>DADDY ISSUES</description>
		<language>ru-ru</language>
		<lastBuildDate>Mon, 28 Aug 2023 16:42:49 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>Тестовое сообщение</title>
			<link>https://daddyissusa.rusff.me/viewtopic.php?pid=11#p11</link>
			<description>&lt;p&gt;[html]&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;h5 {&lt;br /&gt;&amp;#160; opacity: 0.66;&lt;br /&gt;&amp;#160; font-weight: normal;&lt;br /&gt;&amp;#160; font-size: 1.25rem;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.container {&lt;br /&gt;&amp;#160; position: relative;&lt;br /&gt;&amp;#160; width: 430px;&lt;br /&gt;&amp;#160; height: 350px;&lt;br /&gt;&amp;#160; margin: 50px auto;&lt;br /&gt;&amp;#160; background: #fafafa;&lt;br /&gt;&amp;#160; display: flex;&lt;br /&gt;&amp;#160; flex-direction: column;&lt;br /&gt;&amp;#160; justify-content: space-between;&lt;br /&gt;&amp;#160; color: #fff;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.time {&lt;br /&gt;&amp;#160; padding: 10px;&lt;br /&gt;&amp;#160; display: flex;&lt;br /&gt;&amp;#160; justify-content: space-around;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.time-item {&lt;br /&gt;&amp;#160; flex: 1 1 auto;&lt;br /&gt;&amp;#160; border-radius: 5px;&lt;br /&gt;&amp;#160; margin-right: 5px;&lt;br /&gt;&amp;#160; height: 10px;&lt;br /&gt;&amp;#160; background-color: rgba(0,0,0,0.10);&lt;br /&gt;&amp;#160; position: relative;&lt;br /&gt;&amp;#160; overflow: hidden;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.time-item:last-child {&lt;br /&gt;&amp;#160; margin-right: 0;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.time-item &amp;gt; div {&lt;br /&gt;&amp;#160; position: absolute;&lt;br /&gt;&amp;#160; width: 0%;&lt;br /&gt;&amp;#160; height: 100%;&lt;br /&gt;&amp;#160; background-color: rgba(255,255,255,0.5);&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;.content {&lt;br /&gt;&amp;#160; position: absolute;&lt;br /&gt;&amp;#160; height: 350px;&lt;br /&gt;&amp;#160; width:430px;&lt;br /&gt;&amp;#160; background-image: linear-gradient(-180deg, rgba(255,255,255,0.00) 0%, rgba(0,0,0,0.15) 100%);&lt;/p&gt;
						&lt;p&gt;&amp;#160; display: flex;&lt;br /&gt;&amp;#160; flex-direction: column;&lt;br /&gt;&amp;#160; justify-content: flex-end;&lt;br /&gt;}&lt;br /&gt;.texts {&lt;br /&gt;&amp;#160; padding: 7%;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;#back, #next {&lt;br /&gt;&amp;#160; position: absolute;&lt;br /&gt;&amp;#160; top: 0;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;#back {&lt;br /&gt;&amp;#160; left: 0;&lt;br /&gt;&amp;#160; height: 100%;&lt;br /&gt;&amp;#160; width: 50%;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;#next {&lt;br /&gt;&amp;#160; left: 50%;&lt;br /&gt;&amp;#160; height: 100%;&lt;br /&gt;&amp;#160; width: 50%;&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;/p&gt;
						&lt;p&gt;const stories = [&lt;br /&gt;&amp;#160; {&lt;br /&gt;&amp;#160; &amp;#160; title: &#039;Story 1&#039;,&lt;br /&gt;&amp;#160; &amp;#160; description: &#039;description 1&#039;,&lt;br /&gt;&amp;#160; &amp;#160; image: &#039;https://i.pinimg.com/736x/2e/be/62/2ebe623d6d27d70ea13731a01b4210e9.jpg&#039;,&lt;br /&gt;&amp;#160; &amp;#160; time: 3500&lt;br /&gt;&amp;#160; },&lt;br /&gt;&amp;#160; {&lt;br /&gt;&amp;#160; &amp;#160; title: &#039;Story 2&#039;,&lt;br /&gt;&amp;#160; &amp;#160; description: &#039;description 2&#039;,&lt;br /&gt;&amp;#160; &amp;#160; image: &#039;https://i.pinimg.com/736x/7c/f8/18/7cf818809ed21f9d21263b8a8417d504.jpg&#039;,&lt;br /&gt;&amp;#160; &amp;#160; time: 4000&lt;br /&gt;&amp;#160; },{&lt;br /&gt;&amp;#160; &amp;#160; title: &#039;Story 3&#039;,&lt;br /&gt;&amp;#160; &amp;#160; description: &#039;description 3&#039;,&lt;br /&gt;&amp;#160; &amp;#160; image: &#039;https://i.pinimg.com/736x/b7/7b/e1/b77be1a020e21187490bb65859d2832c.jpg&#039;,&lt;br /&gt;&amp;#160; &amp;#160; time: 2500&lt;br /&gt;&amp;#160; },&lt;br /&gt;&amp;#160; {&lt;br /&gt;&amp;#160; &amp;#160; title: &#039;Story 4&#039;,&lt;br /&gt;&amp;#160; &amp;#160; description: &#039;description 4&#039;,&lt;br /&gt;&amp;#160; &amp;#160; image: &#039;https://i.pinimg.com/736x/8d/77/5e/8d775e040b58466a44518ad6b5c2a678.jpg&#039;,&lt;br /&gt;&amp;#160; &amp;#160; time: 7500&lt;br /&gt;&amp;#160; }&lt;br /&gt;]&lt;/p&gt;
						&lt;p&gt;const container = document.querySelector(&#039;.container&#039;)&lt;br /&gt;const nextButton = document.querySelector(&#039;#next&#039;)&lt;br /&gt;const backButton = document.querySelector(&#039;#back&#039;)&lt;/p&gt;
						&lt;p&gt;function Storyfier(storiesArray, rootEl) {&lt;br /&gt;&amp;#160; this.stories = storiesArray&lt;br /&gt;&amp;#160; this.root = rootEl&lt;br /&gt;&amp;#160; this.times = rootEl.querySelector(&#039;#times&#039;)&lt;br /&gt;&amp;#160; this.currentTime = 0&lt;br /&gt;&amp;#160; this.currentIndex = 0&lt;/p&gt;
						&lt;p&gt;&amp;#160; // create breakpoints for when the slides should change&lt;br /&gt;&amp;#160; this.intervals = this.stories.map((story, index) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; // TODO change so that it just uses the previous value + current time&lt;br /&gt;&amp;#160; &amp;#160; let sum = 0&lt;br /&gt;&amp;#160; &amp;#160; for (let i = 0; i &amp;lt; index; i++){&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; sum += this.stories[i].time&lt;br /&gt;&amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; return sum&lt;br /&gt;&amp;#160; })&lt;/p&gt;
						&lt;p&gt;&amp;#160; // necessary to make sure the last slide plays to completion&lt;br /&gt;&amp;#160; this.maxTime = this.intervals[this.intervals.length - 1] + this.stories[this.stories.length - 1].time&lt;/p&gt;
						&lt;p&gt;&amp;#160; // render progress bars&lt;br /&gt;&amp;#160; this.progressBars = this.stories.map(() =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; const el = document.createElement(&#039;div&#039;)&lt;br /&gt;&amp;#160; &amp;#160; el.classList.add(&#039;time-item&#039;)&lt;br /&gt;&amp;#160; &amp;#160; el.innerHTML = &#039;&amp;lt;div style=&amp;quot;width: 0%&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;&amp;#160; &amp;#160; return el&lt;br /&gt;&amp;#160; })&lt;/p&gt;
						&lt;p&gt;&amp;#160; this.progressBars.forEach((el) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; this.times.appendChild(el)&lt;br /&gt;&amp;#160; })&lt;/p&gt;
						&lt;p&gt;&amp;#160; // methods&lt;br /&gt;&amp;#160; this.render = () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; const story = this.stories[this.currentIndex]&lt;br /&gt;&amp;#160; &amp;#160; this.root.style.background = `url(&#039;${story.image}&#039;)`&lt;br /&gt;&amp;#160; &amp;#160; this.root.querySelector(&#039;#title&#039;).innerHTML = story.title&lt;br /&gt;&amp;#160; &amp;#160; this.root.querySelector(&#039;#description&#039;).innerHTML = story.description&lt;br /&gt;&amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; this.updateProgress = () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; this.progressBars.map((bar, index) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; // Fill already passed bars&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; if (this.currentIndex &amp;gt; index) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; bar.querySelector(&#039;div&#039;).style.width = &#039;100%&#039;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; return&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; if (this.currentIndex &amp;lt; index) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; bar.querySelector(&#039;div&#039;).style.width = &#039;0%&#039;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; return&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; // update progress of current bar&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; if (this.currentIndex == index) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const timeStart = this.intervals[this.currentIndex]&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; let timeEnd;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (this.currentIndex == this.stories.length - 1){&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; timeEnd = this.maxTime&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; } else {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; timeEnd = this.intervals[this.currentIndex + 1]&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; const animatable = bar.querySelector(&#039;div&#039;)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; animatable.style.width = `${((this.currentTime - timeStart)/(timeEnd - timeStart))*100}%`&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; })&lt;br /&gt;&amp;#160; }&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Storyfier.prototype.start = function(){&lt;br /&gt;&amp;#160; // Render initial state&lt;br /&gt;&amp;#160; this.render()&lt;/p&gt;
						&lt;p&gt;&amp;#160; // START INTERVAL&lt;br /&gt;&amp;#160; const test = setInterval(() =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; this.currentTime += 10&lt;br /&gt;&amp;#160; &amp;#160; this.updateProgress()&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; if (this.currentIndex &amp;gt;= this.stories.length - 1 &amp;amp;&amp;amp; (this.currentTime &amp;gt; this.maxTime)){&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; clearInterval(test)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; return&lt;br /&gt;&amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; const lastIndex = this.currentIndex&lt;br /&gt;&amp;#160; &amp;#160; if (this.currentTime &amp;gt;= this.intervals[this.currentIndex + 1]){&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; this.currentIndex += 1&lt;br /&gt;&amp;#160; &amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;#160; if (this.currentIndex != lastIndex) {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; this.render()&lt;br /&gt;&amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; }, 10)&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Storyfier.prototype.next = function(){&lt;br /&gt;&amp;#160; const next = this.currentIndex + 1&lt;br /&gt;&amp;#160; if (next &amp;gt; this.stories.length - 1){&lt;br /&gt;&amp;#160; &amp;#160; return&lt;br /&gt;&amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; this.currentIndex = next&lt;br /&gt;&amp;#160; this.currentTime = this.intervals[this.currentIndex]&lt;br /&gt;&amp;#160; this.render()&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;Storyfier.prototype.back = function(){&lt;br /&gt;&amp;#160; if ((this.currentTime &amp;gt; (this.intervals[this.currentIndex] + 350)) || this.currentIndex === 0){&lt;br /&gt;&amp;#160; &amp;#160; this.currentTime = this.intervals[this.currentIndex]&lt;br /&gt;&amp;#160; &amp;#160; return&lt;br /&gt;&amp;#160; }&lt;/p&gt;
						&lt;p&gt;&amp;#160; this.currentIndex -= 1&lt;br /&gt;&amp;#160; this.currentTime = this.intervals[this.currentIndex]&lt;br /&gt;&amp;#160; this.render()&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;const setup = async () =&amp;gt; {&lt;br /&gt;&amp;#160; const loadImages = stories.map(({ image }) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; let img = new Image()&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; img.onload = () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; resolve(image)&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; }&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; img.src = image&lt;br /&gt;&amp;#160; &amp;#160; })&lt;br /&gt;&amp;#160; })&lt;/p&gt;
						&lt;p&gt;&amp;#160; await Promise.all(loadImages)&lt;/p&gt;
						&lt;p&gt;&amp;#160; const s = new Storyfier(stories, container);&lt;br /&gt;&amp;#160; s.start()&lt;/p&gt;
						&lt;p&gt;&amp;#160; nextButton.addEventListener(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; s.next()&lt;br /&gt;&amp;#160; })&lt;/p&gt;
						&lt;p&gt;&amp;#160; backButton.addEventListener(&#039;click&#039;, () =&amp;gt; {&lt;br /&gt;&amp;#160; &amp;#160; s.back()&lt;br /&gt;&amp;#160; })&lt;br /&gt;}&lt;/p&gt;
						&lt;p&gt;setup()&lt;/p&gt;
						&lt;p&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;div id=&amp;quot;times&amp;quot; class=&amp;quot;time&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;div class=&amp;quot;texts&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;lt;h1 id=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;lt;h5 id=&amp;quot;description&amp;quot;&amp;gt;&amp;lt;/h5&amp;gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;/div&amp;gt;&lt;/p&gt;
						&lt;p&gt;&amp;#160; &amp;lt;div id=&amp;quot;back&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;div id=&amp;quot;next&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;[/html]&lt;/p&gt;</description>
			<author>mybb@mybb.ru (daddy issues)</author>
			<pubDate>Mon, 28 Aug 2023 16:42:49 +0300</pubDate>
			<guid>https://daddyissusa.rusff.me/viewtopic.php?pid=11#p11</guid>
		</item>
	</channel>
</rss>
