js仿拉勾网首页穿墙广告效果


Posted in Javascript onMarch 08, 2017

效果图:

js仿拉勾网首页穿墙广告效果

代码如下:

<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <title>Title</title>
<style>
*{margin:0; padding:0; list-style:none;}
ul{ overflow:hidden; width:630px; margin:100px auto;}
ul li{ float:left; position:relative; width:200px; height:200px; background:#ccc; margin:5px; overflow:hidden;}
ul li span{ position:absolute; width:100%; height:100%; background:rgba(255,0,0,0.3); left:-200px; top:0;}
</style>
<script>
function getStyle(obj,sName){
 return (obj.currentStyle||getComputedStyle(obj,false))[sName];
}
function move(obj,json,options){
 options = options||{};
 options.duration = options.duration||700;
 options.easing = options.easing||'ease-out';
 var start = {};
 var dis = {};
 for(var name in json){
 start[name] = parseFloat(getStyle(obj,name));
 dis[name] = json[name]-start[name];
 }
 var count = Math.floor(options.duration/30);
 var n = 0;
 clearInterval(obj.timer);
 obj.timer = setInterval(function(){
 n++;
 for(var name in json){
 switch(options.easing){
 case 'linear':
  var cur = start[name]+dis[name]*n/count;
  break;
 case 'ease-in':
  var a = n/count;
  var cur = start[name]+dis[name]*Math.pow(a,3);
  break;
 case 'ease-out':
  var a = 1-n/count;
  var cur = start[name]+dis[name]*(1-Math.pow(a,3));
  break;
 }
 if(name=='opacity'){
 obj.style.opacity = cur;
 obj.style.filter = 'alpha(opacity:'+cur*100+')';
 }else{
 obj.style[name] = cur+'px';
 }
 }
 if(n==count){
 clearInterval(obj.timer);
 options.complete&&options.complete();
 }
 },30);
}
function a2d(n){
 return n*180/Math.PI;
}
function hoverDir(ev,obj){
 var a = ev.clientX-obj.offsetLeft-obj.offsetWidth/2;
 var b = obj.offsetTop+obj.offsetHeight/2-ev.clientY;

 return Math.round((a2d(Math.atan2(b,a))+180)/90)%4;
}
function through(obj){
 var oS = obj.children[0];
 obj.onmouseenter = function(ev){
 var oEvent = ev||event;
 var dir = hoverDir(oEvent,obj);
 switch(dir){
 case 0:
 //左
 oS.style.left = '-200px';
 oS.style.top = 0;
 break;
 case 1:
 //下
 oS.style.left = 0;
 oS.style.top = '200px';
 break;
 case 2:
 //右
 oS.style.left = '200px';
 oS.style.top = 0;
 break;
 case 3:
 //上
 oS.style.left = 0;
 oS.style.top = '-200px';
 break;
 }
 move(oS,{left:0,top:0});
 };
 obj.onmouseleave = function(ev){
 var oEvent = ev||event;
 var dir = hoverDir(oEvent,obj);
 switch(dir){
 case 0:
 move(oS,{left:-200,top:0});
 break;
 case 1:
 move(oS,{left:0,top:200});
 break;
 case 2:
 move(oS,{left:200,top:0});
 break;
 case 3:
 move(oS,{left:0,top:-200});
 break;
 }
 };
}
window.onload = function(){
 var aLi = document.getElementsByTagName('li');
 for(var i=0;i<aLi.length;i++){
 through(aLi[i]);
 }
};
</script>
</head>
<body>
 <ul>
 <li><span></span></li>
 <li><span></span></li>
 <li><span></span></li>
 <li><span></span></li>
 <li><span></span></li>
 <li><span></span></li>
 </ul>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 表单验证插件formValidation实现个性化错误提示
Jun 23 Javascript
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
Mar 12 Javascript
JavaScript代码复用模式详解
Nov 07 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
初试vue-cli使用HBuilderx打包app的坑
Jul 17 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
Nov 26 jQuery
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
JavaScript中的工厂函数(推荐)
Mar 08 #Javascript
老生常谈js中0到底是 true 还是 false
Mar 08 #Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 #Javascript
JS字符串false转boolean的方法(推荐)
Mar 08 #Javascript
原生js实现选项卡功能
Mar 08 #Javascript
js, jQuery实现全选、反选功能
Mar 08 #Javascript
基于JQuery的购物车添加删除以及结算功能示例
Mar 08 #Javascript
You might like
非常好的php目录导航文件代码
2006/10/09 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php中JSON的使用与转换
2015/01/14 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
深入了解js原型模式
2019/05/30 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
vue实现购物车加减
2020/05/30 Javascript
js数组的基本使用总结
2021/01/18 Javascript
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
如何利用find命令查找文件
2015/02/07 面试题
Prototype如何更新局部页面
2013/03/03 面试题
小学后勤管理制度
2014/01/14 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP