JavaScript之图片操作6
上一篇写的关于放大镜的,可能在实际开发中用的不是很多,接下来将的图片无缝滚动在实际工作中就是用的比较多的了。
如上图,通过定时器控制图片无缝滚动,当鼠标悬浮时停止滚动,鼠标离开,滚动继续。
主要原理是通过定位实现图片的移动,然后通过定时器实现滚动的效果,即无缝滚动。
首先是基础的结构
<!DOCTYPE html>
<html>
<head>
<title>无缝滚动</title>
<style type="text/css">
*{margin:0;padding:0;}
ul{list-style:none;float:left;}
li{margin: 5px;border:3px double #00a67c;float:left;}
li img{width:150px;float:left;}
#demo{width:800px;overflow: hidden;margin:100px auto;border: 1px solid #999;}
#indemo{width:800%;float:left;}
</style>
</head>
<body>
<div id="demo">
<div id="indemo">
<ul id="demo1">
<li><img src="img/pic1.jpg"></li>
<li><img src="img/pic2.jpg"></li>
<li><img src="img/pic3.jpg"></li>
<li><img src="img/pic4.jpg"></li>
<li><img src="img/pic5.jpg"></li>
<li><img src="img/pic6.jpg"></li>
<li><img src="img/pic7.jpg"></li>
</ul>
<ul id="demo2"></ul>
</div>
</div>
</body>
</html>
有了基本结构后,就要让图片动起来,为了实现图片的无缝滚动,将存放图片的ul进行复制,放在其后,模拟循环效果。其次,每当图片滚动到复制元素的最后一张图片时,就应该让图片重新回到最开始的状态再继续滚动,这样的话就形成了无缝循环滚动的效果。
<script type="text/javascript">
window.onload = function(){
var age = 20;
var tab = document.getElementById('demo');
var tab1 = document.getElementById('demo1');
var tab2 = document.getElementById('demo2');
tab2.innerHTML = tab1.innerHTML; function run(){
//tab1的宽度小于 tab被隐藏的宽度;
if(tab1.offsetWidth - tab.scrollLeft <=0 ){
//重置tab被隐藏的宽度
tab.scrollLeft -= tab1.offsetWidth;
}else {
tab.scrollLeft++;
}
};
var mymar = setInterval(run,age);
}
</script>
最后就是优化了,当鼠标悬浮时停止滚动,鼠标离开后继续滚动。
<script type="text/javascript">
tab.onmouseover = function(){
clearInterval(mymar);
}
tab.onmouseout = function(){
mymar = setInterval(run,age);
}
</script>
到此,我们就实现了最开始想要的效果了,完整代码如下:
<!DOCTYPE html>
<html>
<head>
<title>无缝滚动</title>
<style type="text/css">
*{margin:0;padding:0;}
ul{list-style:none;float:left;}
li{margin: 5px;border:3px double #00a67c;float:left;}
li img{width:150px;float:left;}
#demo{width:800px;overflow: hidden;margin:100px auto;border: 1px solid #999;}
#indemo{width:800%;float:left;}
</style> </head>
<body>
<div id="demo">
<div id="indemo">
<ul id="demo1">
<li><img src="img/pic1.jpg"></li>
<li><img src="img/pic2.jpg"></li>
<li><img src="img/pic3.jpg"></li>
<li><img src="img/pic4.jpg"></li>
<li><img src="img/pic5.jpg"></li>
<li><img src="img/pic6.jpg"></li>
<li><img src="img/pic7.jpg"></li>
</ul>
<ul id="demo2"></ul>
</div>
</div>
<script type="text/javascript">
window.onload = function(){
var age = 20;
var tab = document.getElementById('demo');
var tab1 = document.getElementById('demo1');
var tab2 = document.getElementById('demo2');
tab2.innerHTML = tab1.innerHTML; function run(){
if(tab1.offsetWidth - tab.scrollLeft <=0 ){
tab.scrollLeft -= tab1.offsetWidth;
}else {
tab.scrollLeft++;
}
};
var mymar = setInterval(run,age);
tab.onmouseover = function(){
clearInterval(mymar);
}
tab.onmouseout = function(){
mymar = setInterval(run,age);
}
}
</script>
</body>
</html>
完整详细代码链接:点这里
JavaScript之图片操作6的更多相关文章
- JavaScript之图片操作7
前面总结了很多了有关于图片操作的案例,本次是基于前面的基础,做一个综合的图片轮播效果,需要实现以下功能: 没有任何操作时,图片自动轮播 鼠标悬浮时,图片停止轮播:当鼠标移开,轮播继续 鼠标悬浮时,出现 ...
- JavaScript之图片操作5
本次的图片操作是要实现模仿天猫淘宝的放大镜效果,如下图所示: 其实现原理其实很简单,主要就是定位的运用,在上面的图中,左边是一个div,它的大小就是左边图片的大小,我们称为左窗口(原图),红色部分我们 ...
- JavaScript之图片操作1
在网页中,经常需要对图片经常各种操作,包括切换,轮播等等,接下来将总结一些常见的图片操作,首先是最简单前后切换. 如上面所示,通过点击右边的按钮切换左边的图片,为了实现想要的效果,首先,我们需要在ht ...
- JavaScript之图片操作3
在页面布局中,常常会用到九宫格布局,如下图所示: 本次我们就以九宫格为基础进行图片的布局操作,首先我们以上面的图片的为例,假设每个格子的大小都相同,将每一个格子相对其父元素进行定位,这样,我们只需要控 ...
- JavaScript之图片操作4
本次要实现的效果是,在一个盒子里面有一张长图,只显示了一部分,为方便用户浏览,当鼠标移入时,图片开始滚动,将盒子分成上下两部分,当鼠标移入上部分时,图片向上滚动,当鼠标移入下部分时,图片向下滚动. 为 ...
- JavaScript之图片操作2
在前一次,我们实现最简单的图片切换效果,这一次,依旧还是图片切换,具体效果如下: 通过点击下面的小图,上面的大图和标题随之切换.因此,我们需要三个容器分别放标题,大图和小图. <!--大图描述- ...
- JavaScript校验图片格式及大小
<!DOCTYPE html> <html> <head> <title>JavaScript校验图片格式及大小</title> <s ...
- 网站开发综合技术 三 JavaScript的DOM操作
第3部分 JavaScript的DOM操作 1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 ...
- JavaScript DOM 基础操作
JavaScript DOM 基础操作 一.获取元素的六方式 document.getElementById('id名称') //根据id名称获取 document.getElementsByclas ...
随机推荐
- 牛客国庆集训派对Day1-C:Utawarerumono(数学)
链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- scrapy框架学习之路
一.基础学习 - scrapy框架 介绍:大而全的爬虫组件. 安装: - Win: 下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip3 ...
- Chrome程序及数据位置变更到非系统盘
Chrome浏览器在Windows系统上安装过程,没有设置安装位置的步骤,所以默认是安装在C盘的.并且,若Chrome作为主要浏览器使用,随着时间的积累,数据文件会非常多.增加系统盘的负荷. Wind ...
- LeetCode – Smallest Rotation with Highest Score
Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1 ...
- 非系统服务如何随系统启动时自动启动(rc.local加了可执行权限,仍然没有生效)
我们知道,例如我们直接yum 安装的httpd mysqld之类的服务可以直接systemctl enable mysql使服务自动启动,但是,我们应该关心的是但是的那部分 例如nginx,我的话,我 ...
- day43 数据库学习egon的博客 索引
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- Load Balancing OpenSSH SFTP with HAProxy
In my previous post I described how we setup a Ubuntu Server (12.0.4) as an OpenSSH SFTP server. In ...
- Web-Business-Application-Solution
项目地址 : https://github.com/kelin-xycs/Web-Business-Application-Solution Web-Business-Application-Sol ...
- redis 的 docker 镜像使用
redis 镜像使用: 创建容器(暴露端口:6379,使用 Redis 可视化界面工具(如:Fastoredis)连接 redis 时连接该端口): docker run -it -p 6379:63 ...
- output.filename 与 output.chunkFilename 的区别
// webpack.config.js module.exports = { entry: './src/index.js', output: { filename: '[name].bundle. ...