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 相关文章推荐
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
Oct 11 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
微信小程序 教程之数据绑定
Oct 18 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
vue 利用路由守卫判断是否登录的方法
Sep 29 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
微信小程序新手教程之页面打开数量限制
Mar 03 Javascript
浅探express路由和中间件的实现
Sep 30 Javascript
vue-amap根据地址回显地图并mark的操作
Nov 03 Javascript
react合成事件与原生事件的相关理解
May 13 Javascript
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 各种应用乱码问题的解决方法
2010/05/09 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
js实现踩五彩块游戏
2020/02/08 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
实例介绍Python中整型
2019/02/11 Python
python输入错误后删除的方法
2019/10/12 Python
详解python的super()的作用和原理
2020/10/29 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
社区工作者先进事迹
2014/01/18 职场文书
质量保证书范本
2014/04/29 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
git中cherry-pick命令的使用教程
2022/06/25 Servers