### 图片无缝滚动代码知识点详解 #### 一、概述 图片无缝滚动技术是网页设计中常见的一种效果,常用于广告轮播、新闻滚动等场景。本文档提供的代码示例实现了一个简单的图片无缝垂直滚动功能,并且能够根据鼠标移动进行暂停与恢复。 #### 二、核心概念解析 1. **DOM (Document Object Model)** - DOM 是一种标准,用来表示 XML 或 HTML 文档的结构。通过 JavaScript 可以访问文档中的对象并操作它们。 2. **CSS (Cascading Style Sheets)** - CSS 被用来定义和创建网页的样式。在这个例子中,我们使用 CSS 来设置容器的尺寸和溢出隐藏属性。 3. **JavaScript** - JavaScript 用于控制图片滚动的逻辑,包括滚动速度、方向以及响应用户的交互行为(如鼠标悬停时暂停滚动)。 #### 三、具体实现细节 ##### 1. HTML 结构 ```html <div id="demo" style="overflow:hidden; height:400px; width:160px; background:#214984; color:#ffffff;"> <table align="top" cellpadding="0" cellspacing="0" border="0"> <tr> <td id="demo1" valign="top"> <img src="pic/1.jpg" width="156" height="200" /> <br> <img src="pic/2.jpg" width="160" height="198" /> <br> <img src="pic/3.jpg" width="155" height="200" /> <br> <img src="pic/4.jpg" width="157" height="200" /> </td> </tr> <tr> <td id="demo2" valign="top"></td> </tr> </table> </div> ``` - 这段代码定义了两个 `<td>` 元素,分别是 `demo1` 和 `demo2`。其中 `demo1` 包含了所有图片,而 `demo2` 最初为空。 - 使用 `<br>` 来换行,以达到图片垂直排列的效果。 ##### 2. CSS 样式 - `overflow: hidden` 属性用于隐藏超出容器范围的内容,这样可以实现图片的滚动效果而不显示容器边界之外的部分。 - 设置容器的高度和宽度,确保滚动效果在限定范围内发生。 ##### 3. JavaScript 实现 ```javascript var speed = 30; var demo = document.getElementById('demo'); var demo1 = document.getElementById('demo1'); var demo2 = document.getElementById('demo2'); demo2.innerHTML = demo1.innerHTML; // 复制 demo1 的内容到 demo2 function Marquee() { if (demo2.offsetHeight - demo.scrollTop <= 0) { // 当 demo2 滚动到底部时 demo.scrollTop -= demo1.offsetHeight; // 重置 scrollTop 到顶部 } else { demo.scrollTop++; // 向下滚动一行 } } var MyMar = setInterval(Marquee, speed); // 设置定时器每隔 30ms 执行一次滚动 // 鼠标悬浮时停止滚动 demo.onmouseover = function () { clearInterval(MyMar); }; // 鼠标离开时继续滚动 demo.onmouseout = function () { MyMar = setInterval(Marquee, speed); }; ``` - **变量初始化**:定义滚动速度 `speed` 和获取 DOM 元素 `demo`, `demo1`, `demo2`。 - **复制内容**:将 `demo1` 内容复制到 `demo2` 中,这是实现无缝滚动的关键步骤。 - **滚动逻辑**:`Marquee` 函数用于控制滚动方向和位置。 - 如果 `demo2` 已经滚动到底部,则将 `scrollTop` 重置到顶部。 - 否则,每次递增 `scrollTop`,使内容向下滚动。 - **事件监听**:添加 `onmouseover` 和 `onmouseout` 事件监听器,实现用户交互时暂停与恢复滚动。 #### 四、扩展知识 1. **兼容性问题** - 不同浏览器对于 DOM API 的支持程度不同,可能需要对代码进行适当调整以适应不同的浏览器环境。 2. **性能优化** - 使用 `requestAnimationFrame` 替代 `setInterval` 可以提高滚动流畅度并减少 CPU 占用。 3. **多方向滚动** - 可以通过调整 `scrollTop` 和 `scrollLeft` 的值来实现水平或垂直滚动的不同方向。 #### 五、总结 通过以上介绍,我们可以看到这个图片无缝滚动代码示例不仅实现了基本的功能需求,还加入了一些交互性的元素(例如:鼠标悬停时暂停滚动),使其更加实用和友好。此外,还可以在此基础上进一步优化和完善,以满足更多复杂的应用场景。
先介绍一下它的实现思路:一个设定宽度并且隐藏超出它宽度的内容的容器demo,里面放demo1和demo2,demo1是滚动内容,demo2为demo1的直接克隆,通过不断改变demo1的scrollTop或者scrollLeft达到滚动的目的,当滚动至demo1与demo2的交界处时直接跳回初始位置,因为demo1与demo2一样,所以分不出跳动的瞬间,从而达到“无缝”滚动的目的。
先了解一下对象的几个的属性:
innerHTML:设置或获取位于对象起始和结束标签内的 HTML
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
offsetWidth:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的宽度
向上滚动的代码:
<div id=demo style=overflow:hidden;height:400;width:160;background:#214984;color:#ffffff><table align=top cellpadding=0 cellspace=0 border=0><tr><td id=demo1 valign=top><img src="pic/1.jpg" width="156" height="200" /><br><img src="pic/2.jpg" width="160" height="198" /><br><img src="pic/3.jpg" width="155" height="200" /><br><img src="pic/4.jpg" width="157" height="200" /></td></tr><tr><td id=demo2 valign=top></td></tr></table></div>
<script>
var speed=30
demo2.innerHTML=demo1.innerHTML//克隆demo1为demo2
function Marquee(){
if(demo2.offsetHeight-demo.scrollTop<=0)//当滚动至demo1与demo2交界时
demo.scrollTop-=demo1.offsetHeight//demo跳到最顶端
else{
demo.scrollTop++
}
}
var MyMar=setInterval(Marquee,speed)//设置定时器
demo.onmouseover=function() {clearInterval(MyMar)}//鼠标移上时清除定时器达到滚动停止的目的
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助