我们在浏览网页时,经常会看到会一些滚动的栏目,比如向上滚动的公告、新闻等。其实他们的制作都不难,只要学了基础的html、css、javascript就可以做出来,用JavaScript的scrollTop就行。

scrollTop:返回或设置匹配元素的滚动条的垂直位置。

 <div id="div1" style="width:200px;height:200px;background-color:#999999;overflow:auto;background-color: #999999;">
<div style="width:100px;height:300px;background-color:#FFFF00;" >
这些文字显示在内层元素中。
</div>
</div>

这里,内层容器高度大于外层容器,就会产生垂直滚动条,当用javascript设置外层容器:

var div1=document.getElementById("div1");

div1.scrollTop=50;

文字部分会往上走50像素,相当于用滚动条向下拉了50像素。

(注意:当内层容器内容不超出外层容器高度时,不会产生滚动条,因此scrollTop自然也无效了。若外层容器设置了overflow:hidden时,不显示滚动条,但内容部分超出外层容器的话,scrollTop依然有效)

这就是一个已经做好的demo截图,下面是详细步骤

1、写html结构和css样式

 <div  id="main">
<h3 id="title">Title</h3>
<div id="box">
<ul id="con1">
<li><a href="#">1.学会html5 绝对的屌丝逆袭</a><span>2016-06-01</span></li>
<li><a href="#">2.tab页面切换效果(案例)</a><span>2016-06-01</span></li>
<li><a href="#">3.圆角水晶按钮制作(案例)</a><span>2016-06-01</span></li>
<li><a href="#">4.HTML+CSS基础课程(系列)</a><span>2016-06-01</span></li>
<li><a href="#">5.分页页码制作(案例)</a><span>2016-06-01</span></li>
<li><a href="#">6.导航条菜单的制作(案例)</a><span>2016-06-01</span></li>
<li><a href="#">7.信息列表制作(案例)</a><span>2016-06-01</span></li>
<li><a href="#">8.下拉菜单制作(案例)</a><span>2016-06-01</span></li>
<li><a href="#">9.如何实现“新手引导”效果</a><span>2016-06-01</span></li>
</ul>
<ul id="con2">    /* 滚动需要 */
     </ul>
 </div>
</div>
         * {
margin: 0px;
padding: 0px; /* 去掉所有标签的marign和padding的值 */
}
ul {
list-style: none; /* 去掉ul标签默认的点样式 */
}
a {
color: #333;
font-size: 12px;
text-decoration: none; /* 超链接样式 */
}
a:hover {
color: #ff0000;
}
#main {
width: 399px;
border: 5px solid #ababab;
-moz-border-radius: 15px; /* Gecko browsers */
-webkit-border-radius: 15px; /* Webkit browsers */
border-radius: 15px;
box-shadow: 2px 2px 10px #ababab;
margin: 50px auto 0;
text-align: left; /* 让新闻内容靠左 */
}
/* 头部样式 */
#title {
height: 62px;
overflow: hidden; /* 内容超出的部分要隐藏,免得撑高头部 */
font-size: 26px;
line-height: 62px;
padding-left: 30px;
background-image: -moz-linear-gradient(top, #f05e6f, #c9394a); /* Firefox */
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f05e6f), color-stop(1, #c9394a)); /* Saf4+, Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8fa1ff', endColorstr='#f05e6f', GradientType='0'); /* IE*/
border: 1px solid #f05e6f;
-moz-border-radius: 8px 8px 0 0; /* Gecko browsers */
-webkit-border-radius: 8px 8px 0 0; /* Webkit browsers */
border-radius: 8px 8px 0 0;
color: #fff;
position: relative;
}
#title a {
position: absolute;
right: 10px;
bottom: 10px;
display: inline;
color: #fff;
font-size: 12px;
line-height: 24px;
}
#box {
height: 144px;
width: 335px;
margin-left: 25px;
margin-top: 10px;
overflow: hidden; /* 超出的内容部分要隐藏,免得撑高中间部分 */
}
#main ul li {
height: 24px;
}
#main ul li a {
float: left;
text-indent: 15px;
}
#main ul li span {
float: right;
color: #999;
}

在con1设置了ul和li的高度样式,足以撑大容器,使得con1高度大于了外层容器#box高度,scrollTop就起作用了。

2、下面写javascript部分

     var area = document.getElementById('box');
var con1 = document.getElementById('con1');
var con2 = document.getElementById('con2');

先获取滚动部分的父容器area和滚动部分容器,若设置:area.scrollTop =10;内容就会往上走10px。

我们的目的就是让它自动往上滚动,就需要这样:area.scrollTop ++;用定时器setInterval()调用,就要包装成函数

 function scrollUp(){
area.scrollTop ++;
}
var myScroll = setInterval("scrollUp()",50);

这表示每50毫秒执行一次scrollTop加一函数,这时就可以滚动了。但滚动到con1末尾就停了,这时因为后面没东西了,自然就不会继续滚动了。再看html有一个空的con2,就是用来处理这个问题,要把con1复制一份给con2 ,让con1滚动完,继续滚动con2

    con2.innerHTML = con1.innerHTML;

很明显con2也会滚动完,那有这么办,难道再复制一个con3、con4吗,肯定不可行。con2滚动时,con1已经滚动出外面了,已经看不见了,此时就可以对它进行操作了。

     function scrollUp(){
if(area.scrollTop >= con1.scrollHeight) {
area.scrollTop = 0;
}else{
area.scrollTop ++;
}
}

更改了scrollUp()函数,加一个判断,当容器往上滚动(相当于有滚动条、滚动条向下拉)到con1高度时,con1刚好向上消失掉,又出现覆盖了con2。再继续向上,滚动出去又马上覆盖con2,无限这样循环。

要改进一下,可以添加两个事件,滚动速度可以用var speed=50;设置

     area.onmouseover = function(){
clearInterval(myScroll);
}
area.onmouseout = function(){
myScroll = setInterval("scrollUp()",speed);
}

鼠标移动到容器时,就停止滚动,移出时又继续滚动。

全部javascript代码如下

   var area = document.getElementById('box');
var con1 = document.getElementById('con1');
var con2 = document.getElementById('con2');
var speed = 50;
area.scrollTop = 0;
con2.innerHTML = con1.innerHTML;
function scrollUp(){
if(area.scrollTop >= con1.scrollHeight) {
area.scrollTop = 0;
}else{
area.scrollTop ++;
}
}
var myScroll = setInterval("scrollUp()",speed);
area.onmouseover = function(){
clearInterval(myScroll);
}
area.onmouseout = function(){
myScroll = setInterval("scrollUp()",speed);
}

以上就是滚动栏的做法,主要用于个人学习记录

用scrollTop制作一个自动滚动公告栏的更多相关文章

  1. 利用scrollTop 制作图片无缝滚动

    <!doctype html><title>javascript无缝滚动 by 司徒正美</title><meta charset="utf-8&q ...

  2. 制作iis自动安装包

    原文:制作iis自动安装包 MS 一直没有提供可独立安装的 IIS 安装包,Windows 的缺省安装没有安装它,通常要到控制面板的"添加/删除 Windows 程序"中去选择安装 ...

  3. 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。

    js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...

  4. [聊天框]让DIV的滚动条自动滚动到最底部 - 4种方法

    要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...

  5. 让DIV的滚动条自动滚动到最底部 - 3种方法

    要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...

  6. 如何制作一个自适应手机、电脑、ipad的网页方法总结

    进入2015年,手机上网的用户已经越来越多,已经赶超PC端.随着2G.3G.4G.免费WIFI和无线基站的不断普及,越来越多的人开始使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端. ...

  7. 制作一个可以滑动操作的 Table View Cell

    本文转载至 https://github.com/nixzhu/dev-blog Apple 通过 iOS 7 的邮件(Mail)应用介绍了一种新的用户界面方案——向左滑动以显示一个有着多个操作的菜单 ...

  8. Swift - 制作一个在线流媒体音乐播放器(使用StreamingKit库)

    在之前的文章中,我介绍了如何使用 AVPlayer 制作一个简单的音乐播放器(点击查看1.点击查看2).虽然这个播放器也可以播放网络音频,但其实际上是将音频文件下载到本地后再播放的. 本文演示如何使用 ...

  9. 【Vue】input textarea自动滚动到输入处

    由于我这里要把接口返回的日志不断地新增到textarea里,想实现自动滚动日志的效果. 1.首先定一个textarea类型的input组件 <el-input id="textarea ...

随机推荐

  1. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  2. VMware 克隆 Linux 系统后找不到 eth0 网卡问题(转)

    [问题描述] 使用 VMware 虚拟机的克隆功能,快速复制已安装好的 Linux 系统. 克隆完成之后,发现没有 eth0 网卡. [解决方法] 1. 编辑 /etc/udev/rules.d/70 ...

  3. arduino 入手

    新买了个ardhuino 入门套件 1. Win7 Driver issue: Need to install the below drivers, because my windows is ins ...

  4. [转]PowerDesigner设置集锦

    powerdesiner的自增长列,以前都是生成sql语句后,再在自增长列中添加Identity(1,1).找了好久,终于打到了方法. 1.如果dbms是MsSql,则选定表后,database-&g ...

  5. oracle sys as dba

    ====管理分区表====1.添加分区(若已设置取值范围为MAXVALUE的分区,则会报ORA-14174分区界限必须调整为高于最后一个分区界限)alter table test_part_tab a ...

  6. JSP中<base href="<%=basePath%>">作用

    通常在JSP页面开通有如下代码: <% String path = request.getContextPath(); String basePath = request.getScheme() ...

  7. 使用VirtualBox自带管理工具命令为虚拟磁盘扩展空间

    VirtualBox虚拟磁盘空间不够了,默认10G.想扩大,图形界面下没有找到可操作菜单.Google了一下用 Vbox自带的命令工具VBoxManage即可解决. C:\Program Files\ ...

  8. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  9. .net 第二周学习

    这周更进一步的介绍了.net,通过作业的练习,有那么一点点的成就感,相对于前端,成就感还不是很大,但是我还是会继续加油  学习.net,看着他们周末只能呆在寝室写网页,顿时我就高兴了:        ...

  10. 大数据存储:MongoDB实战指南——常见问题解答

    锁粒度与并发性能怎么样? 数据库的读写并发性能与锁的粒度息息相关,不管是读操作还是写操作开始运行时,都会请求相应的锁资源,如果请求不到,操作就会被阻塞.读操作请求的是读锁,能够与其它读操作共享,但是当 ...