这是一款基于HTML5 SVG制作的路径过渡动画幻灯片特效。该幻灯片特效使用SVG路径来剪裁幻灯片中的图片,制作出幻灯片切换时不规则的图形变换效果。
使用方法
HTML结构
该幻灯片特效的HTML结构由包含幻灯片的无序列表ul.cd-slider
和两个作为导航的有序列表元素ul.cd-slider-navigation
和ol.cd-slider-controls
组成。
在ul.cd-slider
元素中列表项由一个SVG <clipPath>
元素(用于改变图片的裁剪区域)和一个<image>
元素组成。
< div class = "cd-slider-wrapper" > < ul class = "cd-slider" data-step1 = "M1402,800h-2V0.6c0-0.3,0-0.3,0-0.6h2v294V800z" data-step2 = "M1400,800H383L770.7,0.6c0.2-0.3,0.5-0.6,0.9-0.6H1400v294V800z" data-step3 = "M1400,800H0V0.6C0,0.4,0,0.3,0,0h1400v294V800z" data-step4 = "M-2,800h2L0,0.6C0,0.3,0,0.3,0,0l-2,0v294V800z" data-step5 = "M0,800h1017L629.3,0.6c-0.2-0.3-0.5-0.6-0.9-0.6L0,0l0,294L0,800z" data-step6 = "M0,800h1400V0.6c0-0.2,0-0.3,0-0.6L0,0l0,294L0,800z" > < li class = "visible" > < div class = "cd-svg-wrapper" > < svg viewBox = "0 0 1400 800" > < title >Aimated SVG</ title > < defs > < clipPath id = "cd-image-1" > < path id = "cd-changing-path-1" d = "M1400,800H0V0.6C0,0.4,0,0.3,0,0h1400v294V800z" /> </ clipPath > </ defs > < image height = '800px' width = "1400px" clip-path = "url(#cd-image-1)" xlink:href = "img/img-1.jpg" ></ image > </ svg > </ div > <!-- .cd-svg-wrapper --> </ li > < li > < div class = "cd-svg-wrapper" > < svg viewBox = "0 0 1400 800" > <!-- svg content here --> </ svg > </ div > <!-- .cd-svg-wrapper --> </ li > <!-- other list items here --> </ ul > <!-- .cd-slider --> < ul class = "cd-slider-navigation" > < li >< a href = "#0" class = "next-slide" >Next</ a ></ li > < li >< a href = "#0" class = "prev-slide" >Prev</ a ></ li > </ ul > <!-- .cd-slider-navigation --> < ol class = "cd-slider-controls" > < li class = "selected" >< a href = "#0" >< em >Item 1</ em ></ a ></ li > < li >< a href = "#0" >< em >Item 2</ em ></ a ></ li > <!-- other list items here --> </ ol > <!-- .cd-slider-controls --> </ div > <!-- .cd-slider-wrapper --> |
CSS样式
所有的幻灯片slide都设置透明度为0,使用绝对定位,使它们逐个堆叠在一起(使用top: 0 和 left:0)。当前被选择的幻灯片会被添加.visible
class使其变为可见。在剪裁动画被执行的时候,列表项会被添加.is-animating
class。
注意,特效中使用了Padding Hack来使SVG具有响应式效果(在IE中如果你不明确指定SVG的高度,它会被设置为150px)。在特效中设置div.cd-svg-wrapper
的高度为0,padding-bottom
为57.15%(为了保持SVG的比例,这里是800/1400),并设置SVG 的宽度和高度为100%。
.cd-slider > li. visible { position : relative ; z-index : 2 ; opacity : 1 ; } .cd-slider > li.is-animating { z-index : 3 ; opacity : 1 ; } .cd-slider .cd-svg-wrapper { /* using padding Hack to fix bug on IE - svg height not properly calculated */ height : 0 ; padding-bottom : 57.15% ; } .cd-slider svg { position : absolute ; top : 0 ; left : 0 ; width : 100% ; height : 100% ; } |
JAVASCRIPT
为了制作幻灯片图片剪裁区域动画,特效中动画<clipPath>
中的<path>
元素的d
属性
当路径定义完成后,特效中在.cd-slider
元素上添加data-stepn
属性,它等于d
属性中定义的路径。
特效中使用Snap.svg的animate()
方法来制作SVG路径动画
clipPath.attr( 'd' , path1).animate({ 'd' : path2}, duration, firstCustomMinaAnimation, function (){ clipPath.animate({ 'd' : path3}, duration, secondCustomMinaAnimation, function (){ oldSlide.removeClass( 'visible' ); newSlide.addClass( 'visible' ).removeClass( 'is-animating' ); }); }); |
另外,这个幻灯片特效可以使用移动触摸或键盘来控制幻灯片的切换。
网盘下载密码:quhx