原生JavaScript实现鼠标悬停图片预览幻灯片效果
本文介绍如何使用原生JavaScript实现一个鼠标悬停图片预览的幻灯片效果。通过监听链接的onmouseover事件,利用setTimeout控制图片元素的left和top偏移量,实现平滑的动画切换。无需额外库,仅用基础DOM操作即可增强网站交互体验。
原生JavaScript实现鼠标悬停图片预览幻灯片效果
在网页开发中,特别是首页设计时,通常包含指向网站其他主要页面的导航栏,或在介绍文字中嵌入跳转链接。传统做法是利用title属性为这些链接提供解释性文字提示,但为了提升用户体验,我们可以制作一个幻灯片Demo。当用户鼠标悬停在某个链接上时,下方会动态显示对应的图片预览。这种方式既美化了页面布局,又显著增强了网站的交互性。接下来,我们将一起编写这个漂亮的幻灯片脚本。
准备工作:在编写脚本之前,需要预先制作一张合成图片,该图片需包含所有预览效果的子图,具体样式参考下图:

HTML结构与CSS样式
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;
}
JavaScript脚本实现
script.js
实现思路:
在编写脚本前,先梳理逻辑,明确开发目标: 1. 动态创建节点以展示预览图片 2. 为a标签绑定onmouseover事件 3. 利用setTimeout()函数,结合对图片元素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制作完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
js-cookie 安装与基础用法:set、get、remove 详解
2026-11-05 16:35:06
适合JavaScript初学者的实战项目:制作简易待办事项列表
2026-11-05 16:17:07
JS打开新标签页时怎么通过URL传递参数
2026-11-05 12:21:08
sigma.js 自定义节点样式:设置颜色、大小及标签显示的技巧
2026-11-05 09:55:00
JS 生成的统计图怎么导出为 PNG 图片或 PDF 文件?
2026-11-05 09:37:58
