用原生JS来实现一个简单幻灯片效果
Admin 2021-04-07 群英技术资讯 1736 次浏览
图片幻灯片是网页开发中的一个常见效果,可以用来展示商品广告,展示网站其他活动页面等等,这篇文章主要展示如何用原生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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是jQuery实现全选效果的思路和方法。小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
接到需求需要一个服务来执行shell脚本,要求可以实时打印shell脚本执行的过程,并看到脚本执行的结果。明确任务目标:这是一个web服务,需要执行shell脚本当一个脚本执行的时候,再次发送请求需要等待当前脚本执行完毕,再自动执行这次请求使用长连接而不是socket添加脚本不需要重启服务器这里采用的是express框架开始首先搭好express基本框架新建
这篇文章给大家分享的是vue中嵌入外部网站的方法。小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
JS有哪些高效的魔法运算符?对于JS运算符大家应该都比较熟悉,但JavaScript在不断更新,也会增加不少高效的运算法,这篇文章给大家分享一些高效的魔法运算符,感兴趣的朋友就继续往下看吧。
这篇文章主要为大家介绍了使用Vite处理css less及postcss的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008