文章目录
- js原理
- 实施任务
- 1.从左往右无缝滚动
- 代码示例
- 运行效果
- 2.从右往左无缝滚动
- 代码示例
- 运行效果
- 3.从上往下无缝滚动
- 代码示例
- 运行效果
- 4.从下往上无缝滚动
- 代码示例
- 运行效果
js原理
获取整个ul和ul下面的所有li, 把ul里面的li内容添加一份,因为需要完成图片滚动效果所以需要二份完成无缝对接, 定义初始速度。
设置定时器 在定时中进行判断 实现原理:因为ul是跟着父元素div进行定位的,所以ul的offsetleft的值初始值为0。
只需要改变ul的left值就可以完成滚动效果 当ul的offsetleft值大于0的时候说明图片正在向右滚动,此时只需要把当前left值变成整个盒子的一半。
并且将盒子定位到左边一半的位置就能完成滚动中的无缝对接。
当uL的offset值小于负的此时盒子一半,说明盒子正在向左移动,完成滚动的一半时,则需要将此时的ul回到最初的位置。
每走一次定时器,将left的值添加定义的初始速度,完成滚动。
获取上方两个左右滚动,因为第一个是向左滚动,只需要将此时的初始速度变成负数。
实施任务
1.从左往右无缝滚动
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style>
body, div, ul, li, p {
padding: 0;
margin: 0;
}
#div1 {
position: relative;
margin: 10px auto;
border: 1px solid black;
width: 680px;
height: 170px;
overflow: hidden;
}
#div1 ul {
position: absolute;
left: 0;
}
#div1 ul li {
float: left;
padding: 10px;
list-style: none;
width: 150px;
height: 150px;
}
#div1 ul li img {
width: 150px;
height: 150px;
}
</style>
<body>
<div id="div1">
<ul>
<li>
<img src="../img/img/1.jpeg" alt="">
</li>
<li>
<img src="../img/img/2.jpeg" alt="">
</li>
<li>
<img src="../img/img/3.jpeg" alt="">
</li>
<li>
<img src="../img/img/4.jpeg" alt="">
</li>
<li>
<img src="../img/img/5.jpeg" alt="">
</li>
<li>
<img src="../img/img/6.jpeg" alt="">
</li>
</ul>
</div>
<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById("div1");
var oUl = document.getElementsByTagName("ul")[0];
var oLi = document.getElementsByTagName("li");
var oA = document.getElementsByTagName("a");
var timer = null;
var iSpeed = 8;
//复制一遍ul
oUl.innerHTML += oUl.innerHTML;
//ul的宽度是所有li宽度之和,复制ul之后的整个ul的宽度就是li的长度乘以一个li的宽度
oUl.style.width = oLi.length * oLi[0].offsetWidth + "px";
function fnMove() {
//图片向左移动时的条件,即在div里的ul的offsetLeft小于一个ul的宽度
if (oUl.offsetLeft < -oUl.offsetWidth / 2) {
//将整个复制的ul向右拖拽直至整个ul中的第一张图归位到起点
oUl.style.left = 0;
}
//图片向右移动时的条件,即在div里的ul的offsetLeft大于等于0
else if (oUl.offsetLeft >= 0) {
//将整个复制的ul向左拖拽直至整个ul中的第一张图归位到起点
oUl.style.left = -oUl.offsetWidth / 2 + "px";
}
//给ul一个速度让整个ul的offsetLeft增加或减少,速度为正则向右移动,速度为负则向左移动
oUl.style.left = oUl.offsetLeft + iSpeed + "px";
}
//从左往右
iSpeed = 8;
//自动滚动
timer = setInterval(fnMove, 30);
//当鼠标移动到div里面的时候图片滚动暂停,此时清除定时器即可。
oDiv.onmouseover = function() {
clearInterval(timer);
}
//当鼠标移出div的时候图片继续滚动,此时重新加载定时器。
oDiv.onmouseout = function() {
timer = setInterval(fnMove, 30);
}
}
</script>
</body>
</html>
运行效果
2.从右往左无缝滚动
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style>
body, div, ul, li, p {
padding: 0;
margin: 0;
}
#div1 {
position: relative;
margin: 10px auto;
border: 1px solid black;
width: 680px;
height: 170px;
overflow: hidden;
}
#div1 ul {
position: absolute;
left: 0;
}
#div1 ul li {
float: left;
padding: 10px;
list-style: none;
width: 150px;
height: 150px;
}
#div1 ul li img {
width: 150px;
height: 150px;
}
</style>
<body>
<div id="div1">
<ul>
<li>
<img src="../img/img/1.jpeg" alt="">
</li>
<li>
<img src="../img/img/2.jpeg" alt="">
</li>
<li>
<img src="../img/img/3.jpeg" alt="">
</li>
<li>
<img src="../img/img/4.jpeg" alt="">
</li>
<li>
<img src="../img/img/5.jpeg" alt="">
</li>
<li>
<img src="../img/img/6.jpeg" alt="">
</li>
</ul>
</div>
<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById("div1");
var oUl = document.getElementsByTagName("ul")[0];
var oLi = document.getElementsByTagName("li");
var oA = document.getElementsByTagName("a");
var timer = null;
var iSpeed = 8;
//复制一遍ul
oUl.innerHTML += oUl.innerHTML;
//ul的宽度是所有li宽度之和,复制ul之后的整个ul的宽度就是li的长度乘以一个li的宽度
oUl.style.width = oLi.length * oLi[0].offsetWidth + "px";
function fnMove() {
//图片向左移动时的条件,即在div里的ul的offsetLeft小于一个ul的宽度
if (oUl.offsetLeft < -oUl.offsetWidth / 2) {
//将整个复制的ul向右拖拽直至整个ul中的第一张图归位到起点
oUl.style.left = 0;
}
//图片向右移动时的条件,即在div里的ul的offsetLeft大于等于0
else if (oUl.offsetLeft >= 0) {
//将整个复制的ul向左拖拽直至整个ul中的第一张图归位到起点
oUl.style.left = -oUl.offsetWidth / 2 + "px";
}
//给ul一个速度让整个ul的offsetLeft增加或减少,速度为正则向右移动,速度为负则向左移动
oUl.style.left = oUl.offsetLeft + iSpeed + "px";
}
//从右往左
iSpeed = -8;
//自动滚动
timer = setInterval(fnMove, 30);
//当鼠标移动到div里面的时候图片滚动暂停,此时清除定时器即可。
oDiv.onmouseover = function() {
clearInterval(timer);
}
//当鼠标移出div的时候图片继续滚动,此时重新加载定时器。
oDiv.onmouseout = function() {
timer = setInterval(fnMove, 30);
}
}
</script>
</body>
</html>
运行效果
3.从上往下无缝滚动
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>无缝滚动_从上往下</title>
</head>
<style>
body, div, ul, li, p {
padding: 0;
margin: 0;
}
#div1 {
position: relative;
margin: 50px auto;
border: 1px solid black;
width: 170px;
height: 680px;
overflow: hidden;
}
#div1 ul {
position: absolute;
left: 0;
}
#div1 ul li {
float: left;
padding: 10px;
list-style: none;
width: 150px;
height: 150px;
}
#div1 ul li img {
width: 150px;
height: 150px;
}
</style>
<body>
<div id="div1">
<ul>
<li>
<img src="../img/img/1.jpeg" alt="">
</li>
<li>
<img src="../img/img/2.jpeg" alt="">
</li>
<li>
<img src="../img/img/3.jpeg" alt="">
</li>
<li>
<img src="../img/img/4.jpeg" alt="">
</li>
<li>
<img src="../img/img/5.jpeg" alt="">
</li>
<li>
<img src="../img/img/6.jpeg" alt="">
</li>
</ul>
</div>
<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById("div1");
var oUl = document.getElementsByTagName("ul")[0];
var oLi = document.getElementsByTagName("li");
var oA = document.getElementsByTagName("a");
var timer = null;
var iSpeed = 8;
//复制一遍ul
oUl.innerHTML += oUl.innerHTML;
//ul的高度是所有li高度之和,复制ul之后的整个ul的高度就是li的长度乘以一个li的高度
oUl.style.height = oLi.length * oLi[0].offsetHeight + "px";
function fnMove() {
//图片向上移动时的条件,即在div里的ul的offsetTop小于一个ul的高度
if (oUl.offsetTop < -oUl.offsetHeight / 2) {
//将整个复制的ul向下拖拽直至整个ul中的第一张图归位到起点
oUl.style.top = 0;
}
//图片向下移动时的条件,即在div里的ul的offsetTop大于等于0
else if (oUl.offsetTop >= 0) {
//将整个复制的ul向上拖拽直至整个ul中的第一张图归位到起点
oUl.style.top = -oUl.offsetHeight / 2 + "px";
}
//给ul一个速度让整个ul的offsetTop增加或减少,速度为正则向下移动,速度为负则向上移动
oUl.style.top = oUl.offsetTop + iSpeed + "px";
}
//从上往下
iSpeed = 8;
//自动滚动
timer = setInterval(fnMove, 30);
//当鼠标移动到div里面的时候图片滚动暂停,此时清除定时器即可。
oDiv.onmouseover = function() {
clearInterval(timer);
}
//当鼠标移出div的时候图片继续滚动,此时重新加载定时器。
oDiv.onmouseout = function() {
timer = setInterval(fnMove, 30);
}
}
</script>
</body>
</html>
运行效果
4.从下往上无缝滚动
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>无缝滚动_从下往上</title>
</head>
<style>
body, div, ul, li, p {
padding: 0;
margin: 0;
}
#div1 {
position: relative;
margin: 50px auto;
border: 1px solid black;
width: 170px;
height: 680px;
overflow: hidden;
}
#div1 ul {
position: absolute;
left: 0;
}
#div1 ul li {
float: left;
padding: 10px;
list-style: none;
width: 150px;
height: 150px;
}
#div1 ul li img {
width: 150px;
height: 150px;
}
</style>
<body>
<div id="div1">
<ul>
<li>
<img src="../img/img/1.jpeg" alt="">
</li>
<li>
<img src="../img/img/2.jpeg" alt="">
</li>
<li>
<img src="../img/img/3.jpeg" alt="">
</li>
<li>
<img src="../img/img/4.jpeg" alt="">
</li>
<li>
<img src="../img/img/5.jpeg" alt="">
</li>
<li>
<img src="../img/img/6.jpeg" alt="">
</li>
</ul>
</div>
<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById("div1");
var oUl = document.getElementsByTagName("ul")[0];
var oLi = document.getElementsByTagName("li");
var oA = document.getElementsByTagName("a");
var timer = null;
var iSpeed = 8;
//复制一遍ul
oUl.innerHTML += oUl.innerHTML;
//ul的高度是所有li高度之和,复制ul之后的整个ul的高度就是li的长度乘以一个li的高度
oUl.style.height = oLi.length * oLi[0].offsetHeight + "px";
function fnMove() {
//图片向上移动时的条件,即在div里的ul的offsetTop小于一个ul的高度
if (oUl.offsetTop < -oUl.offsetHeight / 2) {
//将整个复制的ul向下拖拽直至整个ul中的第一张图归位到起点
oUl.style.top = 0;
}
//图片向下移动时的条件,即在div里的ul的offsetTop大于等于0
else if (oUl.offsetTop >= 0) {
//将整个复制的ul向上拖拽直至整个ul中的第一张图归位到起点
oUl.style.top = -oUl.offsetHeight / 2 + "px";
}
//给ul一个速度让整个ul的offsetTop增加或减少,速度为正则向下移动,速度为负则向上移动
oUl.style.top = oUl.offsetTop + iSpeed + "px";
}
//从下往上
iSpeed = -8;
//自动滚动
timer = setInterval(fnMove, 30);
//当鼠标移动到div里面的时候图片滚动暂停,此时清除定时器即可。
oDiv.onmouseover = function() {
clearInterval(timer);
}
//当鼠标移出div的时候图片继续滚动,此时重新加载定时器。
oDiv.onmouseout = function() {
timer = setInterval(fnMove, 30);
}
}
</script>
</body>
</html>