简单模仿拉钩网上的“hot_info”
前言
突然想起来之前看到拉钩网上的hot_info(不知道该叫什么,但是拉钩网上这个div的class是hot_info),感觉实现起来还是比较轻松简单的,效果也不错,于是简单模仿了一下。就不截图了,有兴趣的可以去拉钩网看看效果。模仿的效果可以点这里。
技术
主要是用了jQuery。动画部分是animate()来实现的。
判断进入div的方向
首先用jQuery的offset()方法获得元素相对于页面的坐标;然后用event对象的pageX和pageY属性,这是鼠标进入元素的相对于页面的坐标。要注意的是这两个坐标的值都是浮点型(当然也有直接进入div内部的情况,鼠标滚轮啊之类的),显然只能比较距离,判断距离最近的就是进入的方向。
function judgeD(item, event) {
//判斷方向
var $this = $(item);
var outx = event.pageX;
var outy = event.pageY;
var offset = $this.offset();
var itemx = offset.left;
var itemy = offset.top;
var width = parseInt($this.css('width'));
var height = parseInt($this.css('height'));
var min = {
d: 'left',
val: Math.abs(outx - itemx)
}
var tempVal = Math.abs(outy - itemy);
if (tempVal < min.val) {
min.d = 'top';
min.val = tempVal;
}
var tempVal = Math.abs(outx - width - itemx);
if (tempVal < min.val) {
min.d = 'right';
min.val = tempVal;
}
var tempVal = Math.abs(outy - height - itemy);
if (tempVal < min.val) {
min.d = 'bottom';
min.val = tempVal;
}
return min.d;
};
动画
动画就不多说了。。,这个方法有些太长了。其中的flag是为了在快速移出移入的时候不闪烁,并且更自然一些。
function move($target, d, f, flag) {
$target.show().stop(true);
if (!flag) {
switch(f) {
case 'left':
$target.css({
top: 0,
left: '-100%'
});
break;
case 'right':
$target.css({
top: 0,
left: '200%'
});
break;
case 'top':
$target.css({
top: '-100%',
left: 0
});
break;
case 'bottom':
$target.css({
top: '200%',
left: 0
});
break;
case 'center':
$target.css({
top: 0,
left: 0
});
break;
}
}
var easing = 'swing';
switch(d) {
case 'left':
$target.animate({
top: 0,
left: '-100%'
}, {
speed: 500,
easing: easing,
});
break;
case 'right':
$target.animate({
top: 0,
left: '200%'
}, {
speed: 500,
easing: easing,
});
break;
case 'top':
$target.animate({
top: '-100%',
left: 0
}, {
speed: 500,
easing: easing,
});
break;
case 'bottom':
$target.animate({
top: '200%',
left: 0
}, {
speed: 500,
easing: easing,
});
break;
case 'center':
$target.animate({
top: 0,
left: 0
}, {
speed: 500,
easing: easing,
});
break;
}
}
绑定事件
$(function() {
$('.test_item').hover(function(event) {
var d = judgeD(this, event);
var $target = $(this).find('.test_inner');
move($target, 'center', d);
}, function(event) {
var d = judgeD(this, event);
var $target = $(this).find('.test_inner');
move($target, d, 'center', true);
});
});
css
html, body {
width: 100%;
height: 100%;
}
.test_item {
width: 30%;
height: 30%;
overflow: hidden;
background: #333;
position: relative;
float: left;
margin: 15px;
}
.test_item .test_inner {
width: 100%;
height: 100%;
top: 100%;
left: 100%;
background: #1fa67a;
position: absolute;
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="css/test.css">
</head>
<body>
<!-- Emmet -->
(.test_item>.test_inner)*12
<script type="text/javascript" src="js/jquery-3.1.1.js"></script>
</body>
</html>
还需改进的地方
除了有个方法太长了,还有其他一些需要改进的地方(其实是太懒了懒得改了):
- 首先是污染了全局环境,闭包或者封装成对象都可解决。
- 绑定的事件有点多(是指每一个
.test_item元素上都绑定了两个事件处理函数)。因为mouseover和mouseout是会冒泡的,因此增加一个包装层,在包装层上绑定事件,再用event.target来获得目标就行。
简单模仿拉钩网上的“hot_info”的更多相关文章
- 爬取拉钩网上所有的python职位
# 2.爬取拉钩网上的所有python职位. from urllib import request,parse import json,random def user_agent(page): #浏览 ...
- react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
1.下拉刷新/上拉加载更多 组件(RefreshListView) src/components/RefreshListView/index.js /** * 下拉刷新/上拉加载更多 组件(Refre ...
- RecyclerView下拉刷新上拉加载(三)—对Adapter的封装
RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...
- RecyclerView 下拉刷新上拉加载
步骤: 首先直接定义一个XRecyclerView继承RecyclerView,重写他的三个构造方法. init(Context mContext)方法用来初始化底部加载的view 回到XRecycl ...
- JS+CSS实现的下拉刷新/上拉加载插件
闲来无事,写了一个当下比较常见的下拉刷新/上拉加载的jquery插件,代码记录在这里,有兴趣将代码写成插件与npm包可以留言. 体验地址:http://owenliang.github.io/pull ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- ListView下拉刷新上拉加载更多实现
这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...
- listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
本篇是基于上篇listview下拉刷新上拉加载扩展(二)-仿美团外卖改造而来,主要调整了headview的布局,并加了两个背景动画,看似高大上,其实很简单: as源码地址:http://downloa ...
随机推荐
- Java集合(4)一 红黑树、TreeMap与TreeSet(下)
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树. ...
- webDriver检索table数据
最近在做爬虫相关工作,用到了webdriver,记录一些遇到的问题和解决方法: 如何查找 table中的行 例如: <div id="a"> <table cla ...
- 今日文摘:浅谈 HTML5 的游戏化之路
如今商业网站中用于广泛的HTML5无限下拉效果已经越来越受到游戏网站的喜爱.各个品牌为了打造专属自己的游戏特色,纷纷推出了模拟HTML5效果的品牌 站,且都起到了相当好的效果.可是从很多方面来说我们对 ...
- 初学者必看:.NET 中的静态与非静态的异同
对于初学者来说,.NET 的静态和非静态一直比较难掌握,这里做一个总结,介绍静态类和普通类,静态方法和实例方法,静态构造函数和实例构造函数,静态字段和非静态字段的区别. 静态类 vs 普通类 静态类与 ...
- 【BZOJ】1572: [Usaco2009 Open]工作安排Job
[题意]给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值.n<=10^5. [算法]贪心+堆 [题解] 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为 ...
- sublime格式化css代码插件:css format
有时会从网上下载一些css压缩文件,打开后所有代码都在一行,不利于阅读,通过css format插件,能快速展开代码,方便阅读. 参考:Sublime Text 上最好用的 CSS 格式化插件 —— ...
- 好久没写了,SQLSERVER服务丢失后怎么办
服务器突然中了病毒,查杀后,结果两个服务也丢了, 从其他机器上COPY了两个EXE过来,编写这两个服务就搞定了,不用重装MSSQL2005了 sc create MSSQLSERVER binpath ...
- 图片轮播器——jquery插件
下载:http://files.cnblogs.com/files/wordblog/jiaoben828.rar
- MySQL join 用法
select column1, column2 from TABLE1 join TABLE2 on 条件 # select * from table1 join table2; #两个表合成一个se ...
- bugku数字验证绕过正则
题目:http://120.24.86.145:9009/21.php 第6行使用正则匹配如果匹配到$password开头12个字符中有空格则输出flag并执行exit; 12行是正则匹配$passw ...