基于RevolveR库的基本自动滑块:10行代码

在一段时间内,2013年,我逐渐停止使用jQuery,转而使用本机ECMAScript。我没有任何日常布局所需的工具,sugar API和插件。我不得不从头开始创建库代码,它逐渐获得了快速而舒适的工作所需的一切。我什至没有滑盖,不采用jQuery或其他任何库的想法导致创建了我自己的代码库。



RevolveR Labs的转子



世界上最简单,最小的滑块



当时作为一名布局设计师,我完全理解了插件的工作方式,并以好奇的心态反复探究前端,试图实现代码的最小化并优化CSS或相同布局的工作。



该滑块是在对z-index进行几次实验后诞生的,令我惊讶的是,该程序只有10行。我没有将图像转换为背景图像,而是可以滚动浏览布局块。



这是场景容器的HTML:



<figure>
	<img src="./graphics/R-1.png" alt="RevolveR Labs" />
	<img src="./graphics/R-2.png" alt="RevolveR Labs" />
	<img src="./graphics/R-3.png" alt="RevolveR Labs" />
	<img src="./graphics/R-4.png" alt="RevolveR Labs" />
</figure>


让我们添加一些CSS,这些图像会将图像标签加载到X:0和Y:0(顶部:0px和左侧:0px)的一个牌组中:



figure {

	background: repeating-linear-gradient(45deg, transparent, transparent .1vw, #ffffff45 .1vw, #b7754594 .25vw), linear-gradient(to bottom, #eeeeee5c, #bfbfbf1a);
	box-shadow: inset 0 0 1vw #000;
	outline: .2vw solid #b1917fbd;
	border: .1vw dashed #999;
	display: inline-block;
	text-align: center;
	position: relative;
	overflow: hidden;
	margin: 0 auto;
	width: 36.46vw;
	height: 22vw;

}

	figure img {

		position: absolute;
		width: 36.46vw;
		height: 22vw;
		opacity: 1;
		left: 0;
		top: 0;

	}


由于8K和更多显示器的出现,我不再在布局中使用诸如PX之类的静态值,而是在可伸缩视口单元上执行所有操作,这使我避免了在任何屏幕分辨率下进入媒体查询和设计界面的过程。



现在,让我们编写一个JavaScript处理程序,该处理程序将简单地在甲板上翻转,并且没有任何时间间隔的影响:



var e = document.querySelectorAll('figure img');
let i = 0;

if(e) {

	void setInterval(() => {

			e[i].style.zIndex = 0; 

			i++;

			i = i === e.length ? 0 : i;

			e[i].style.zIndex = 1;

	}, 3000);

}



我们使用setInteval在初始化时进行3秒钟的清理,并在伪循环上实现一个可重置的迭代器。在计时器的每个下一个刻度上,依次更改所需图像的z索引。先前图像的z-index永久重置为0,并且通过将z-index设置为1,当前循环元素位于最前面



世界上最简单,最小的滑盖像卡拉什尼科夫突击步枪一样准备就绪,可靠且基本。现在整个甲板都在滴答作响,伪循环的当前元素脱颖而出。在纯JavaScript中,所有这些都无需第三方即可使用。



添加效果



转子(我叫它)太简单了,我想添加一些过渡效果。要做到这一点,您已经必须使用一个知道如何为CSS赋予动画效果的库,其中包括酷炫的缓动效果(RevolveR中有43种效果)。



这是清单:



let launch = RR.browser;

RR.allowSlide = true;

var e = RR.sel('figure img')

let i = 0;

void setInterval(

	() => {

		if( e && RR.allowSlide ) {

			RR.animate([ e[ i ] ], ['opacity:0:800:lienar'], () => {

				e[ i ].style.zIndex = 0;

				i++;

				i = i === e.length ? 0 : i;

				RR.animate([ e[ i ] ], ['opacity:.8:800:swingTo'], () => {

					e[ i ].style.zIndex = 1;

				});

			});

		}

	}, 

3000);


在这里,实现了一个回调序列来完成动画的状态,该状态在总时间上适合于setInterval计时器类型,并且随着淡入淡出和闪烁,我们得到了很酷的过渡。



一切都很好,但是当指针在舞台上时,我们还可以通过翻转标志来增加延迟:



RR.event('figure img', 'mouseenter', () => {

	RR.allowSlide = null;

	RR.event('figure img', 'mouseleave', () => {

		RR.allowSlide = true;

	});

});


RevolveR Labs的实际转子



此处查看运行中的转子



如您所见,这里也没有太多代码,可以实现更复杂和有趣的效果。但这取决于您。



All Articles