用原生JS来实现一个简单幻灯片效果
Admin 2021-04-07 群英技术资讯 693 次浏览
图片幻灯片是网页开发中的一个常见效果,可以用来展示商品广告,展示网站其他活动页面等等,这篇文章主要展示如何用原生JavaScript来实现一个简单的幻灯片。其效果为通过移动鼠标到相应的链接,下方同时展示对应的图片预留,以下是具体的代码。
准备:在制作脚本之前,需要制作一张图片,这张图片应该展示了所有预览效果,如下图:
index.html
制作有序列表,添加一些页面链接
<body> <h1>简单动画制作</h1> <p>连接跳转目标展示</p> <ol id="list"> <li> <a href="list1.html" >First</a> </li> <li> <a href="list2.html" >Second</a> </li> <li> <a href="list3.html" >Third</a> </li> </ol> <!--动态添加的图片展示区域>--> <script src="script.js"></script> </body>
style.css
为这个导航栏添加一些样式
ol{ padding-left: 20px; } ol li{ display: inline; margin-right: 10px; } #view{ width: 600px; height: 200px; position: absolute; } #slideShow{ width: 200px; height: 200px; overflow: hidden; position: relative; }
script.js
实现思路:
在建立脚本之前,我们先整理一下思路,确定我们要做什么?
1. 新建一些节点用来展示预览图片
2. 为a标签添加onmouseover事件
3. 通过setTimeout()函数,和对图片元素left、top偏移量(获取设置的left top属性时 要转换称整型)的移动完成动画效果
/*共享load*/ function addLoadEvent(fun){ var oldLoad = window.onload; if(typeof oldLoad != "function"){ window.onload = fun; }else{ window.onload = function(){ oldLoad(); fun(); } } } /*insertAfter*/ function insertAfter(newNode,oldNode){ var parent = oldNode.parentNode; if(parent.lastChild == oldNode){ parent.appendChild(newNode); }else{ parent.insertBefore(newNode,oldNode.nextSibling); } } function show(){ /*向后兼容*/ if(!document.getElementById) return false; if(!document.getElementsByTagName) return false; if(!document.createElement) return false; /*获取列表清单*/ var list = document.getElementById("list"); /*创建图片展示区域*/ /*外层div*/ var div = document.createElement("div"); div.setAttribute("id","slideShow"); /*img*/ var img = document.createElement("img"); img.setAttribute("id","view"); img.setAttribute("src","image.jpg"); img.setAttribute("alt","图片预览"); /*添加 使用insertAfter()函数 保证div紧跟在list列表之后*/ insertAfter(div,list); div.appendChild(img); /*绑定事件*/ var a = list.getElementsByTagName("a"); a[0].onmouseover =function(){ moveElement("view",0,0,10); }; a[1].onmouseover = function(){ moveElement("view",-200,0,10); }; a[2].onmouseover = function(){ moveElement("view",-400,0,10); }; } /*移动 *参数的含义:图片所在元素的id;图片应该向左移动的偏移量;上偏移量;时间 */ function moveElement(elementID,left,top,interval){ /*向后兼容*/ if(!document.getElementById) return false; if(!document.getElementById(elementID)) return false; /*获取图片*/ var img = document.getElementById(elementID); /*判断当前元素是否已经处在一个动画函数中 *防止动画堆积 */ if(img.moveNow){ /*清楚堆栈中的动画*/ clearTimeout(img.moveNow); } /*判断元素是否设置了left和top*/ if(!img.style.left){ img.style.left = "0px"; } if(!img.style.top){ img.style.top = "0px"; } /*获取图片当前位置 *此时获取的值是字符串格式,使用parseInt()强制转化为字符串*/ var oldLeft = parseInt(img.style.left); var oldTop = parseInt(img.style.top); /*将当前位置与目标位置做比较*/ if(oldLeft == left && oldTop == top){ return true; } /*为了保证用户体验,当移动的距离较大时应该移动的快一些 *当移动的距离比较小时,可以适当慢一些 *根据相差的距离判断移动的距离,每次移动相差距离的1/10 */ /*dist变量用于存储当前偏移量与目标偏移量的距离*/ var dist = 0; if(oldLeft < left){ /*ceil()向上取整 防止小数 以及小于1的情况*/ dist = Math.ceil((left-oldLeft)/10); oldLeft = oldLeft+dist; } if(oldLeft > left){ dist = Math.ceil((oldLeft-left)/10); oldLeft = oldLeft - dist; } if(oldTop < top){ dist = Math.ceil((top-oldTop)/10); oldTop = oldTop+dist; } if(oldTop > top){ dist = Math.ceil((oldTop-top)/10); oldTop = oldTop - dist; } /*移动*/ img.style.left = oldLeft+"px"; img.style.top = oldTop+"px"; /*调用函数*/ var result = "moveElement('"+elementID+"',"+left+","+top+","+interval+")"; /*将执行动画的函数,设置成这个元素的一个属性*/ img.moveNow = setTimeout(result,interval); } addLoadEvent(show);
最后执行效果
此时,当我们将鼠标移动到不同列表项时,列表下的图片就会移动到对应的预览图位置。到此,一个简单的幻灯片demo就制作完成了。
以上就是用原生JavaScript实现一个简单图片幻灯片的效果,上述内容详细的代码以及实现思路,希望对大家学习JavaScript有所帮助。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
接到需求需要一个服务来执行shell脚本,要求可以实时打印shell脚本执行的过程,并看到脚本执行的结果。明确任务目标:这是一个web服务,需要执行shell脚本当一个脚本执行的时候,再次发送请求需要等待当前脚本执行完毕,再自动执行这次请求使用长连接而不是socket添加脚本不需要重启服务器这里采用的是express框架开始首先搭好express基本框架新建
这篇文章给大家分享的是用JS怎样实现魔方动态转换的效果,实现效果及代码如下,是一种酷炫的展示效果,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
这篇文章主要介绍了JS构造函数和实例化的关系及原型引入,下文围绕JS构造函数和实例化的关系及原型引入的西安海关资料展开全文内容,需要的朋友可以参考一下,希望对大家有所帮助
这篇文章给大家分享的是JS中设置表格高度的方法和操作。小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
react在linux上部署的方法:1、打开配置文件;2、通过“tar -zcvf client.tar.gz client”命令将client和server打包;3、将“client.tar.gz”,“server.tar.gz”,“theme.js”及“package.json”文件拷贝至服务器上的项目文件夹下;4、开启服务即可。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008