js实现卡片式项目管理界面UI设计效果


Posted in Javascript onDecember 08, 2015

这是一款非常有创意的卡片式项目管理界面UI设计效果。该UI设计中,将各个项目以卡片的方式堆叠排列在屏幕上,当点击了其中的某个项目的时候,该项目图片会全屏放大,向下滚动鼠标可以看到该项目的介绍信息。
该项目管理界面还提供了一个全屏的导航菜单,用户可以通过右上角的汉堡包图标来触发全屏菜单。

js实现卡片式项目管理界面UI设计效果

使用方法
HTML结构
该卡片式项目管理界面的HTML结构分为3个部分:.cd-nav-trigger是全屏菜单的触发按钮,nav.cd-primary-nav是全屏导航菜单,.cd-projects-container是项目无序列表的容器。

每一个项目都包含一个表示项目标题的div.cd-title元素和一个表示项目信息的div.cd-project-info元素。项目的图片被设置为.cd-title::before伪元素的背景图片。

<header>
 <a href="#0" class="cd-logo"><img src="img/cd-logo.svg"></a>
  
 <button class="cd-nav-trigger">Menu<span aria-hidden="true" class="cd-icon"></span></button>
</header>
 
<nav class="cd-primary-nav">
 <ul>
  <li class="cd-label">Navigation</li>
  <li><a href="#0">The team</a></li>
  <!-- 可以有更多的导航项 -->
 </ul>
</nav> <!-- .cd-primary-nav -->
 
<div class="cd-projects-container">
 <ul>
  <li class="single-project">
   <div class="cd-title">
    <h2>Project 1</h2>
   </div> <!-- .cd-title -->
 
   <div class="cd-project-info">
    <button class="cd-scroll">Scroll down</button>
     
    <div class="content-wrapper">
     <p>
      项目描述
     </p>
 
     <!-- 额外的项目信息 -->
    </div>
   </div> <!-- .cd-project-info -->
  </li>
 
  <!-- 其它项目 -->
 </ul>
</div> <!-- .cd-projects-container -->

CSS样式
div.cd-project-info元素(项目信息)被设置为100%的高度和相对定位。每一个单独的项目都使用绝对定位,并设置100%的高度和放置在它们父容器.cd-project-info的左上角位置。开始它们是堆叠在一起的。

接着,第二和第三个项目被使用translateY属性沿Y轴向下移动,分别移动.cd-project-info高度的1/3和2/3。这样就是3个项目分别在同一个屏幕中显示1/3的部分。

.cd-projects-container {
 height: 100%;
 position: relative;
 overflow: hidden;
}
.cd-projects-container .single-project {
 position: absolute;
 top: 0px;
 left: 0px;
 height: 100%;
 width: 100%;
 transition: transform 0.4s;
}
.cd-projects-container .single-project:nth-of-type(2) {
 transform: translateY(33.3333333333%);
}
.cd-projects-container .single-project:nth-of-type(3) {
 transform: translateY(66.6666666667%);
}

.cd-title(项目的标题)被设置为33.33%(1/3视口的高度),而它的伪元素.cd-title::before被设置为300%,实际是等于视口的高度。

.cd-title {
 height: 33.3333333333%;
}
.cd-title::before {
 /* 背景图片 */
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 height: 300%;
 width: 100%;
 background-position: center center;
 background-repeat: no-repeat;
 background-size: cover;
}
.single-project:nth-of-type(1) .cd-title::before {
 background-image: url(../img/img-1.jpg);
}

当某个项目被选择的时候,该项目被添加一个.selected class,该class应用了一个translateY(0)转换。同时将该项目的兄弟元素移动到屏幕之外translateY(100%),这样使该项目占满整个屏幕。

.cd-projects-container .single-project.selected {
 /* 被选择的项目 */
 transform: translateY(0);
}
.cd-projects-container .single-project.selected ~ li {
 /* 隐藏其它项目 */
 transform: translateY(100%);
}

对于.cd-project-info(项目信息),它有100%的高度,一个overflow: auto属性(使其可以滚动),它被放置在父元素.single-project的左上角位置。它的::before伪元素是一个空白占位,它等于屏幕视口的宽度和高度,它的作用是让项目图片开始时可以全屏显示,而不是被content-wrapper的内容覆盖。

.cd-project-info {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 overflow: auto;
 opacity: 0;
 visibility: hidden;
 transition: opacity 0.4s, visibility 0.4s;
}
.cd-project-info::before {
 /* 用与占位,显示项目图片 */
 content: '';
 display: block;
 height: 100%;
 width: 100%;
 pointer-events: none;
}
.cd-project-info .content-wrapper {
 position: relative;
 z-index: 2;
 padding: 2em 0 3em;
 background-color: #FFFFFF;
}
.selected .cd-project-info {
 opacity: 1;
 visibility: visible;
 transition: opacity 0s, visibility 0s;
}

对于全屏导航菜单,开始时.cd-primary-nav元素被放置在.cd-projects-container的下面。当用户点击了.cd-nav-trigger按钮之后,所有的项目被移动到屏幕的下方,这时全屏导航菜单被显示出来。

.cd-primary-nav {
 position: absolute;
 top: 0;
 left: 0;
 /* height = (100% - 9%) - 9% is the space taken by the projects when the navigation is open */
 height: 91%;
 width: 100%;
 overflow: auto;
 opacity: 0;
}
.cd-primary-nav ul {
 transform: translateY(50px);
 transition: transform 0.4s;
}
.cd-primary-nav.nav-open {
 opacity: 1;
}
.cd-primary-nav.nav-open ul {
 transform: translateY(0);
}
 
.cd-projects-container.nav-open .single-project {
 box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
 transform: translateY(91%);
}
.cd-projects-container.nav-open .single-project:nth-of-type(2) {
 transform: translateY(94%);
}
.cd-projects-container.nav-open .single-project:nth-of-type(3) {
 transform: translateY(97%);
}

JavaScript
该UI设计中使用jQuery来监听.cd-nav-trigger和.single-project元素上的点击事件,并为相应的元素添加和移除相应的class。

js实现卡片式项目管理界面UI设计效果就为大家分享到这,希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
谈谈target=_new和_blank的不同之处
Oct 25 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 Javascript
Javascript继承机制详解
May 30 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
javascript如何写热点图
Dec 08 #Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 #Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 #Javascript
jquery+ajax实现注册实时验证实例详解
Dec 08 #Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 #Javascript
基于JavaScript创建动态Dom
Dec 08 #Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 #Javascript
You might like
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
详解js的六大数据类型
2016/12/27 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
深入理解Nodejs Global 模块
2017/06/03 NodeJs
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
你真的了解Python的random模块吗?
2017/12/12 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
python中property和setter装饰器用法
2019/12/19 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
启动仪式策划方案
2014/06/14 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
2015年暑期见闻
2015/07/14 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书