JavaScript实现联想校招员工信息展示
原文摘自我的前端博客,欢迎大家来访问
起因
今天和豪哥聊天,才知道他是我老乡,而且特别近。。真的感觉他是我的贵人,这是他从 联想校招扣出来的,我们就用JavaScript来实现吧
联想校招员工信息展示
点击弹出详细信息
过程
给的有HTML还有CSS3,我打算先用前端模板技术讲信息都出来,之前数据是写死在HTML
数据封装在data.js里
var data = [];
data.push({
'name' : 'Dillon',
'enname' : 'Dillon',
'desc' : '来自哈佛的战略伙伴经理',
'pic' : 'images/n8_10.png',
'bigpic' : 'images/j2.jpg'
});
data.push({
'name' : '成俞晟',
'enname' : 'cheng',
'desc' : '技术宅服务器工程师',
'pic' : 'images/n8_07.png',
'bigpic' : 'images/j3.jpg'
});
data.push({
'name' : 'Said',
'enname' : 'Said',
'desc' : '开朗健谈的中国通',
'pic' : 'images/n8_18.png',
'bigpic' : 'images/j5.jpg'
});
//...
我们讲以前的HTML写成一个模板
展示区模板
<div id="temp_li" style="display: none;">
<li data-id="{i}" class="transform">
<div>
<i></i>
<span>{name}</span>
<p>{desc}</p>
</div>
<img src="{pic}">
</li>
</div>
弹出层模板
<div id="dialog" class="box_ovo ">
<span id="close" class="close"><i></i></span>
<span class="prev"><i></i></span>
<span class="next"><i></i></span>
<div id="div_temp1" data-id="{i}" >
<img class="oimg1" src="{bigpic}">
<div class="ovotxt">
<div class="ovohead">
<h1>{name}</h1>
<i>{enname}</i>
<em>{desc}</em>
<span>ECS</span>
</div>
<p>2013年加入联想,联想游戏中心最霸气的女商务,性格大大咧咧,柔弱的外表下有一颗强大的心。自诩内可安邦定天下,外可御敌千里外。</p>
<p>联想游戏中心作为北研最靓丽的风景线,不仅有着最潮、最流行的游戏可以玩,有各种精美的游戏周边随便拿,最关键的是有这样娇(ba)媚(qi)可(shi)人(zu)的女汉子陪聊,陪工作,陪吃饭。总之一句话,联想游戏中心,你值得拥有。</p>
</div>
</div>
</div>
然后用一下代码弄到HTML里面
//获取LI模板HTML
var tempLi = document.getElementById('temp_li').innerHTML;
//HTML + 数据最后放到这个数组里
var liArr = [];
for (var i = 0; i < data.length; i++) {
//替换模板里{}表达式
var itemLi = tempLi.replace(/\{i\}/, i)
.replace(/\{name\}/,data[i].name)
.replace(/\{desc\}/,data[i].desc)
.replace(/\{pic\}/,data[i].pic);
liArr.push(itemLi);
}
//加入到ul里
ul.innerHTML = liArr.join('');
//获取详细信息模板
var tempDialog = dialog.innerHTML;
//打开弹出层
function openDialog(dataIndex) {
dialog.innerHTML = tempDialog.replace(/\{i\}/,dataIndex)
.replace(/\{name\}/,data[dataIndex].name)
.replace(/\{enname\}/,data[dataIndex].enname)
.replace(/\{desc\}/,data[dataIndex].desc)
.replace(/\{bigpic\}/,data[dataIndex].bigpic);
bg.className += ' current';
dialog.className += ' current';
}
因为HTML是动态生成的,直接不能加绑定事件,所以使用事件委托
//给每一个li加事件
ul.onclick = function(event) {
var e = event || window.event;
var target = e.target || e.srcElement;
target = getLiByChild(target);
if(target) {
var curIndex = target.getAttribute('data-id');
openDialog(curIndex);
}
}
//给弹出层加事件
dialog.onclick = function(){
var e = event || window.event;
var target = e.target || e.srcElement;
var curIndex = +dialog.lastElementChild.getAttribute('data-id');
//点击关闭
if(target.nodeName == 'I' && target.parentNode.className == 'close') {
closeDialog();
}
//点击上一个
if(target.nodeName == 'I' && target.parentNode.className == 'prev') {
var preIndex= curIndex-1;
if(preIndex > -1) {
closeDialog(function() {
openDialog(preIndex);
});
}else {//否则循环到最后一个
closeDialog(function() {
openDialog(data.length-1);
});
}
}
//点击下一个
if(target.nodeName == 'I' && target.parentNode.className == 'next') {
var nextIndex= curIndex+1;
if(nextIndex < data.length) {
closeDialog(function() {
openDialog(nextIndex);
});
}else {//否则循环到最后一个
closeDialog(function() {
openDialog(0);
});
}
}
}
其中,弹出层里有三个动作;
1.关闭弹窗 2.前一个 2.后一个
我们在里面做处理,如果是前一个为第一个则跳到最后一个,如果为最后一个则跳到前一个
因为我们点击的时候有可能点到SPAN,有可能点到DIV(原因看展示区模板),所以要有个函数来 找到顶层的LI,因为关闭有一个动画效果,我看了CSS是0.3s,所以我们加一个定时器做一个回调
//找到最顶层LI
function getLiByChild(element) {
var li = element;
while(li.nodeName != 'LI') {
li = li.parentNode;
}
return li;
}
//关闭Dialog
function closeDialog(func) {
bg.className = 'box_bg1';
dialog.className = 'box_ovo';
setTimeout(function(){
if(dialog.className == 'box_ovo') {
func && func();
}
},300);
}
获取代码
代码就不贴在博客上了,很简单,没什么可看的,大家可以去我的github上检出
JavaScript实现联想校招员工信息展示的更多相关文章
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
- SSH_框架整合4--添加员工信息
SSH_框架整合4--添加员工信息 一. 1 index.jsp:添加:<a href="emp-input">添加员工向信息:Add Employees' Infor ...
- Python 员工信息管理系统
学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- Python_查找员工信息-48
''' 查找出userinfo文件中年龄大于22岁的员工姓名和年龄 1,Alex,22,13651054608,IT 2,Egon,23,13304320533,Tearcher 3,nezha,25 ...
- s9.16作业,员工信息表
转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下:id,name,age,phone,job1, ...
- qt项目:员工信息管理系统
开发一个员工信息管理系统 一.项目具体要求: 1.用qt开发界面,数据库用QSqlite 数据库文件名:demostudent.db 2.通过界面能够查看到数据库中员工信息表中内容,包括员工姓名.年龄 ...
- day21 05 员工信息表
day21 05 员工信息表 假设有一个员工信息表,里面有每个员工的名字,id,年龄,电话,还有他们所作的工作,而有时候我们并不需要所有的信息,而想根据某些条件,寻找符合条件即可,即筛选, 比如想要筛 ...
- Ajax应用查询员工信息
首先要用上一篇的步骤启动服务器,建立站点.然后在该站点下创建php文件和html文件. php代码如下,文件名为server.php <?php //设置页面内容是html编码格式是utf-8 ...
随机推荐
- 关于PHP代码审计和漏洞挖掘的一点思考
这里对PHP的代码审计和漏洞挖掘的思路做一下总结,都是个人观点,有不对的地方请多多指出. PHP的漏洞有很大一部分是来自于程序员本身的经验不足,当然和服务器的配置有关,但那属于系统安全范畴了,我不太懂 ...
- python面向对象基础
面向对象基础 1. 简述 编程方式: 面向过程: 根据代码在脚本的堆叠顺序,从上到下依次执行 函数式编程:将相同功能的代码封装到函数中,直接调用即可,减少代码重复性 面向对象:对函数进行分类和封装,将 ...
- AngularJs 脏值检查及其相关
今天突然就想写写$digest和$apply,这些都是脏值检查的主体内容. 先以普通js来做一个简单的监控例子吧: var div = ducoment.getElementById("my ...
- cookie的实例
使得Cookie简化用户登陆,要求如下: 1.用户第一次登陆时需要输入用户名和密码 2.当登陆成功后,在Cookie中保存用户的登陆信息 3.设置Cookie有效期为5分钟 4.在有效期内用户再次登陆 ...
- opencv 简单模糊和高斯模糊 cvSmooth
cv::Mat 是C++版OpenCV的新结构. cvSmooth() 是老版 C API. 没有把C接口与C + + 结合. 建议你们也可以花一些时间看一下介绍. 同样,你如果查看opencv/mo ...
- iOS - 全屏滑动
取经地址 1.使用关联 关联是指把两个对象相互关联起来,使得其中的一个对象作为另一个对象的一部分. 使用关联,是基于关键字的,因此,我们可以为任意对象增加任意多的关联,但是关键字是唯一的.关联可以保证 ...
- POJ3468A Simple Problem with Integers(区间加数求和 + 线段树)
题目链接 题意:两种操作:一是指定区间的数全都加上一个数,二是统计指定区间的和 参考斌神的代码 #include <iostream> #include <cstring> # ...
- 真机调试之android手机+chrome
真机调试之android手机+chrome 虽然chrome上的移动设备模拟器很强大,但是在真机运行的时候,总会遇到一些小问题,这时就需要使用真机调试了. 第一步:准备一台android手机,并在手机 ...
- Docker入门教程(二)命令
Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...
- python BeautifulSoup4
source form http://www.bkjia.com/ASPjc/908009.html 昨天把传说中的BeautifulSoup4装上了,还没有装好的童鞋,请看本人的上一篇博客: Py ...