幻灯片/轮播

画廊图片展示文件项目UI界面设计

阿里云


这是一款非常有创意的以图片画廊形式展示文件项目 UI 界面设计效果。该效果在第一个界面上有一个“显示项目”按钮,用户点击后可进入图片画廊界面,每一个项目以图片的方式滑动显示,点击相应的图片又会进入相应的项目介绍页面。该文件展示效果设计在显示项目”按钮界面,图片画廊界面和项目介绍界面之间,用户可以自由的来回切换。这个效果采用响应式设计,它支持移动手机的滑动触摸。在桌面设备上,还可以使用鼠标滑动来滚动图片。它所有的动画过渡效果都采用 CSS3 来制作,非常平滑自然。下面的 GIF 图片展示了这个图片画廊形式展示文件项目 UI 界面设计效果的工作过程。

HTML 结构

这个 UI 设计效果的 HTML 结构分为 3 个部分:.cd-intro-block 是包含“显示项目”按钮的元素。.cd-slider 元素是图片画廊(幻灯片)。.cd-project-content 是项目的介绍页面。

也想出现在这里?联系我们
创客主机
  1. <div class="cd-intro-block">
  2.   <div class="content-wrapper">
  3.     <h1>Squeezebox Portfolio Template</h1>
  4.     <a href="#0" class='cd-btn' data-action="load-projects">Show projects</a>
  5.   </div>
  6. </div> <!-- .cd-intro-block -->
  7.  
  8. <div class="cd-projects-wrapper">
  9.   <ul class="cd-slider">
  10.     <li class="current">
  11.       <a href="#0">
  12.         <img src="img/img.png" alt="project image">
  13.         <div class="project-info">
  14.           <h2>Project 1</h2>
  15.           <p>Lorem ipsum dolor sit amet.</p>
  16.         </div>
  17.       </a>
  18.     </li>
  19.  
  20.     <li>
  21.       <!-- project preview here -->
  22.     </li>
  23.  
  24.     <!-- other projects here -->
  25.   </ul>
  26.  
  27.   <ul class="cd-slider-navigation cd-img-replace">
  28.     <li><a href="#0" class="prev inactive">Prev</a></li>
  29.     <li><a href="#0" class="next">Next</a></li>
  30.   </ul> <!-- .cd-slider-navigation -->
  31. </div> <!-- .cd-projects-wrapper -->
  32.  
  33. <div class="cd-project-content">
  34.   <div>
  35.     <h2>Project title here</h2>
  36.     <em>.....</em>
  37.     <!-- other content here -->
  38.   </div>
  39.   <a href="#0" class="close cd-img-replace">Close</a>
  40. </div> <!-- .cd-project-content -->

CSS 样式

当用户点击了按钮 a[data-action="show-projects"]的时候,.cd-intro-block 元素和.cd-projects-wrapper 会被添加.projects-visible class,这个 class 会使按钮界面向上移动和使项目图片画廊进入页面中。.cd-intro-block 会沿 Y 轴向上移动 90%,同时.cd-projects-wrapper 的可见性被设置为 visible。

  1. .cd-intro-block {
  2.   transition: transform 0.5s;
  3.   transition-timing-function: cubic-bezier(0.67, 0.15, 0.83, 0.83);
  4. }
  5. .cd-intro-block.projects-visible {
  6.   /* translate the .cd-intro-block element to reveal the projects slider */
  7.   transform: translateY(-90%);
  8.   box-shadow: 0 4px 40px rgba(0, 0, 0, 0.6);
  9.   cursor: pointer;
  10. }
  11.  
  12. .cd-projects-wrapper {
  13.   position: fixed;
  14.   z-index: 1;
  15.   top: 0;
  16.   left: 0;
  17.   width: 100%;
  18.   height: 100%;
  19.   visibility: hidden;
  20.   transition: visibility 0s 0.5s;
  21. }
  22. .cd-projects-wrapper.projects-visible {
  23.   visibility: visible;
  24.   transition: visibility 0s 0s;
  25. }

对于项目图片进入屏幕的动画效果,是在每一个项目上添加了一个.slides-in class,它们有 50 毫秒的时间延迟。这个 class 会根据屏幕的尺寸来产生不同的动画效果。在移动手机设备中,每一个列表元素默认有 100%的宽度和 opacity: 0,当.slides-in class 被添加的时候,cd-translate 动画就会被执行。

  1. .cd-slider li {
  2.   opacity: 0;
  3. }
  4. .cd-slider li.slides-in {
  5.   opacity: 1;
  6.   animation: cd-translate 0.5s;
  7. }
  8. @keyframes cd-translate {
  9.   0% {
  10.     opacity: 0;
  11.     transform: translateY(100px);
  12.   }
  13.   100% {
  14.     opacity: 1;
  15.     transform: translateY(0);
  16.   }
  17. }

在桌面设备中(视口大于 900 像素),每一个列表项元素默认 26%的宽度,并设置 translateX: 400%和 rotate: -10deg,当.slides-in class 被添加的时候,每一个项目图片被移动会原来的位置(translateX:0),以及旋转角度变为 0。

  1. @media only screen and (min-width: 900px) {
  2.   .cd-slider li {
  3.     position: relative;
  4.     float: left;
  5.     width: 26%;
  6.     top: 50%;
  7.     transform: translateX(400%) translateY(-50%) rotate(-10deg);
  8.     transition: opacity 0s 0.3s, transform 0s 0.3s;
  9.   }
  10.   .cd-slider li.slides-in {
  11.     /* reset style */
  12.     animation: none;
  13.     transform: translateY(-50%);
  14.   }
  15. }

另外在桌面设备的项目图片幻灯片中,所有的项目都是相对定位,并有一个固定的宽度(26%)和一个左浮动(float: left)。.cd-slider 元素的总宽度是可能会发生变化的(在 javascript 代码中实现),所以这里将所有的列表项元素都放置在同一行上面。当用户点击.prev 和.next 前后导航箭头按钮时,.cd-slider 中的列表项会被向左或向右移动 3 倍列表项宽度加上它们的 margin 值的宽度。这个设计中还有一种非常特别的手风琴弹性拉伸效果,它是通过执行 cd-slide-n 动画来实现的。

  1. @keyframes cd-slide-n {
  2.   0%, 100% {
  3.     transform: translateY(-50%);
  4.   }
  5.   50% {
  6.     transform: translateY(-50%) translateX(translateValue);
  7.   }
  8. }

上面的代码的意思是在.cd-slider 的列表项进行过渡动画的时候统一执行一个动画效果,每一个动画效果在 50%帧的时候优惠执行一个不同 translateX 值的动画。下面的 GIF 图片展示了这个效果:

JAVASCRIPT

在桌面设备上,该设计改变.cd-slider 的宽度,使所有的<li>元素都在同一行上。这里使用 setSliderContainer()方法来设置宽度,并在屏幕尺寸改变时修改它。另外,在屏幕尺寸改变时,还会更新.cd-slider 的移动值。

  1. function setSliderContainer() {
  2.   var mq = checkMQ(); //function to check mq value
  3.   if ( mq == 'desktop' ) {
  4.     var slides = projectsSlider.children('li'), // projectsSlider = $('.cd-slider')
  5.       slideWidth = slides.eq(0).width(),
  6.       marginLeft = Number(projectsSlider.children('li').eq(1).css('margin-left').replace('px', '')),
  7.       sliderWidth = ( slideWidth + marginLeft )*( slides.length ) + 'px',
  8.       slideCurrentIndex = projectsSlider.children('li.current').index(); //index of the first visible slide
  9.  
  10.     projectsSlider.css('width', sliderWidth);
  11.     //if the first visible slide is not the first <li> child, update the projectsSlider translate value
  12.     ( slideCurrentIndex != 0 ) && setTranslateValue(projectsSlider, ( slideCurrentIndex * (slideWidth + marginLeft) + 'px'));
  13.   } else {
  14.     //on mobile, reset style
  15.     projectsSlider.css('width', '');
  16.     setTranslateValue(projectsSlider, 0);
  17.   }
  18.   resizing = false;
  19. }
  20. function setTranslateValue(item, translate) {
  21.   item.css({
  22.       '-moz-transform': 'translateX(-' + translate + ')',
  23.       '-webkit-transform': 'translateX(-' + translate + ')',
  24.     '-ms-transform': 'translateX(-' + translate + ')',
  25.     '-o-transform': 'translateX(-' + translate + ')',
  26.     'transform': 'translateX(-' + translate + ')',
  27.   });
  28. }
  29.  
  30. var resizing = false;
  31. setSliderContainer();
  32. $(window).on('resize', function(){
  33.   //on resize - update projectsSlider width and translate value
  34.   if( !resizing ) {
  35.     window.requestAnimationFrame(setSliderContainer);
  36.     resizing = true;
  37.   }
  38. });

另外,还使用 jQuery 来添加和删除相应的 class,和实现对图片幻灯片的基本控制:前后导航按钮,键盘导航和移动触摸导航等。

画廊图片展示文件项目 UI 界面设计

已有 410 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(1)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!