键盘控制背景边框平滑移动(jquery)
今天同事让我看了一个动画效果,是由键盘控制背景边框平滑移动,我感觉挺cool,所以我自己也动手制作了一个。目的是为了锻炼自己,看自己是否也能在短时间内实现。
先上图:
一、html代码
<!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" href="../reset.css"/> <script type="text/javascript" src="../jquery-1.10.2.js"></script> <style type="text/css"> .box {width: 544px; height: 680px; margin: 20px auto;} .tab {position: relative; } .tab ul li {position: relative; float: left; margin: 20px; display: table-cell;} .highLight {display: none; position: absolute; width: 154px; height: 197px;background: url("images/chose.png") no-repeat;} .tab ul li a img{ width: 138px; height: 181px; vertical-align: middle; display:table-cell;vertical-align:middle;} </style> </head> <body> <div class="box"> <div class="tab"> <ul> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> <li><a href="#"><img src="images/img1.jpg"/></a></li> </ul> <div class="highLight"></div> <!-- 高亮显示的背景图片 --> </div> </div>
</body> </html>
二、js代码
$(function(){ var liHeight = $(".tab ul li").outerHeight(true); /* li长度 */ var liWidth = $(".tab ul li").outerWidth(true); /* li宽度 */ var liCount = $(".tab").find("li").length; /* li总个数 */ var i = 0; /* 判断li是否为第一次鼠标事件 */ var index = 0; $(".tab ul li").mouseover(function(){ index = $(this).index(); /* 判断li为第几个数,从0开始 */ var offsetLeft = $(this).offset().left - $(".box").offset().left - 8; /* 为移动图片左边距离,减去8是因为图片原因 */ var offsetTop = $(this).offset().top - $(".box").offset().top - 8; /* 为移动图片上边距离,减去8是因为图片原因 */ if(i==0){ $(".highLight").css({left: offsetLeft,top: offsetTop}).show(); }else if(i>0){ $(".highLight").animate({left: offsetLeft,top: offsetTop},300); } i++; }) var rowCount = 3; /* 每行显示图片的个数 */ var j = 0; $(window).keydown(function(event){ var val = event.which; switch(val){ case(37):/* 键盘左键 */ if(index>0){ index = index-1; } var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8; var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8; if(index>=0){ $(".highLight").animate({left: offsetLeft,top: offsetTop},300); } break; case(38):/* 键盘上键 */ if((index-rowCount)>=0){ index = index - rowCount; var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8; var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8; $(".highLight").animate({left: offsetLeft,top: offsetTop},300); } break; case(39):/* 键盘右键 */ if(j==0){ $(".highLight").css({left: "12px",top: "12px"}).show(); }else if(j>0){ if(index<(liCount-1)){ index = index+1; } var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8; var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8; if(index<liCount){ $(".highLight").animate({left: offsetLeft,top: offsetTop},300); } } j++; break; case(40):/* 键盘下键 */ if((index+rowCount)<liCount){ index = index + rowCount; var offsetLeft = $(".tab ul li").eq(index).offset().left - $(".box").offset().left - 8; var offsetTop = $(".tab ul li").eq(index).offset().top - $(".box").offset().top - 8; $(".highLight").animate({left: offsetLeft,top: offsetTop},300); } } }) })
虽然我现在写的都是一些很简单的代码,但是我还是想通过这种方式来提升自己。里面的文字叙述太少,我会慢慢加强的,争取下次能再好一点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?