JavaScript 无缝上下滚动加定高停顿效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
<script type="text/javascript">
var $ = function (id) {
    return "string" == typeof id ? document.getElementById(id) : id;
};

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

Object.extend = function(destination, source) {
    for (var property in source) {
        destination[property] = source[property];
    }
    return destination;
}

function addEventHandler(oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("on" + sEventType, fnHandler);
    } else {
        oTarget["on" + sEventType] = fnHandler;
    }
};


var Scroller = Class.create();
Scroller.prototype = {
  initialize: function(idScroller, idScrollMid, options) {
    var oScroll = this, oScroller = $(idScroller), oScrollMid = $(idScrollMid);
    
    this.heightScroller = oScroller.offsetHeight;
    this.heightList = oScrollMid.offsetHeight;
    
    if(this.heightList <= this.heightScroller) return;
    
    oScroller.style.overflow = "hidden";
    oScrollMid.appendChild(oScrollMid.cloneNode(true));
    
    this.oScroller = oScroller;    
    this.timer = null;
    
    this.SetOptions(options);
    
    this.side = 1;//1是上 -1是下
    switch (this.options.Side) {
        case "down" :
            this.side = -1;
            break;
        case "up" :
        default :
            this.side = 1;
    }
    
    addEventHandler(oScrollMid , "mouseover", function() { oScroll.Stop(); });
    addEventHandler(oScrollMid , "mouseout", function() { oScroll.Start(); });
    
    if(this.options.PauseStep <= 0 || this.options.PauseHeight <= 0) this.options.PauseStep = this.options.PauseHeight = 0;
    this.Pause = 0;
    
    this.Start();
  },
  //设置默认属性
  SetOptions: function(options) {
    this.options = {//默认值
      Step:            1,//每次变化的px量
      Time:            20,//速度(越大越慢)
      Side:            "up",//滚动方向:"up"是上,"down"是下
      PauseHeight:    0,//隔多高停一次
      PauseStep:    1000//停顿时间(PauseHeight大于0该参数才有效)
    };
    Object.extend(this.options, options || {});
  },
  //滚动
  Scroll: function() {
    var iScroll = this.oScroller.scrollTop, iHeight = this.heightList, time = this.options.Time, oScroll = this, iStep = this.options.Step * this.side;
    
    if(this.side > 0){
        if(iScroll >= (iHeight * 2 - this.heightScroller)){ iScroll -= iHeight; }
    } else {
        if(iScroll <= 0){ iScroll += iHeight; }
    }
    
    if(this.options.PauseHeight > 0){
        if(this.Pause >= this.options.PauseHeight){
            time = this.options.PauseStep;
            this.Pause = 0;
        } else {
            this.Pause += Math.abs(iStep);
            this.oScroller.scrollTop = iScroll + iStep;
        }
    } else { this.oScroller.scrollTop = iScroll + iStep; }
    
    this.timer = window.setTimeout(function(){ oScroll.Scroll(); }, time);
  },
  //开始
  Start: function() {
    this.Scroll();
  },
  //停止
  Stop: function() {
    clearTimeout(this.timer);
  }
};

window.onload = function(){
    new Scroller("idScroller", "idScrollMid",{ PauseHeight:25 });
}
</script>
<style>
#idScroller *{margin:0px; padding:0px;}
#idScroller{line-height:25px;width:500px; height:50px; overflow:hidden; border:1px solid #000000;}
#idScroller ul{width:100%}
#idScroller li{width:50%;  float:left; overflow:hidden; list-style:none;}
</style>
<div id="idScroller">
  <div id="idScrollMid">
    <ul>
      <li><a href="http://shundebk.cn/">111111111111111111111</a></li>
      <li><a href="http://shundebk.cn/">211111111111111111111</a></li>
      <li><a href="http://shundebk.cn/">311111111111111111111</a></li>
      <li><a href="http://shundebk.cn/">411111111111111111111</a></li>
      <li><a href="http://shundebk.cn/">511111111111111111111</a></li>
      <li><a href="http://shundebk.cn/">611111111111111111111</a></li>
    </ul>
    <div style="clear:both;"></div>
  </div>
</div>
</body>
</html>

效果

本文转自博客园cloudgamer的博客,原文链接:JavaScript 无缝上下滚动加定高停顿效果,如需转载请自行联系原博主。

时间: 2024-10-08 12:13:42

JavaScript 无缝上下滚动加定高停顿效果的相关文章

JavaScript 无缝上下左右滚动加定高定宽停顿效果

根据无缝滚动和八向滚动修改而来,特点是能同一程序中分别向四个方向移动.对滚动框内的样式设置有些要求.效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml&

JavaScript 无缝上下左右滚动加定高定宽停顿效果(兼容ie/ff)_javascript技巧

顺德于1993年被批准为广东省综合改革试点. 2006年顺德成为首个GDP超过1000亿的县级行政单位. 2000至2003年顺德均在中国百强县排名中位居榜首. 2005年顺德实现国内生产总值856.11亿元.

JavaScript 无缝上下(左右)滚动加定高(定宽)停顿效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

Javascript无缝左右滚动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

javascript跟随滚动条滚动的层(浮动AD效果)_javascript技巧

                                                此广告位招租

解析javascript瀑布流原理实现图片滚动加载_javascript技巧

先科普下瀑布流吧 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格,像美丽说.淘宝网都有使用. 这是我实现的一个效果,就是怎么滚动都加载不玩.就跟瀑布一样流啊流! 这里的实现方式我们只说Js实现方法 实现原理: 对容器中已有数据块元素进行第一次计算1 容器总宽度 2 列宽度  3 最小列数 ,得到列数

原生javascript实现图片滚动、延时加载功能

 这篇文章主要介绍了使用原生javascript实现图片滚动.延时加载功能,思路与方法均分享给大家,希望对大家能有所帮助.     实现效果:下拉滚动条时,图片出现在可见区域时,才开始加载 思路: (1)img标签,把真实的图片地址,放在自己设置的属性里面,如 lazy-src (2)获取img离页面的高度(在JQ里是offset().top),原生是: img.getBoundingClientRect().top + document.body.scrollTop||document.doc

JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析_javascript技巧

淘宝图片处理讨论淘宝网页面很大,但是打开速度很快.其对图片处理是运用了滚动加载,就是滚动轴滚到哪里,图片在哪里加载.但是你想查看他的源代码,那要费九牛二虎之力吧,因为他们代码压缩合并做的很好!因为图片是滚动加载的,初始化的时候图片不加载,那么当你在页面底部刷新页面的时候,底部的页面通常不会加载出来,淘宝网的做法貌似是(因为我没有看他们的源代码,只是凭操作),刷新让页面回到顶部. 模仿淘宝,做滚动图片加载 这里想到了三种方法:1.javascript懒加载之可视区域加载 <!DOCTYPE htm

javascript实现无缝上下滚动特效_javascript技巧

本文实例讲解了javascript实现无缝上下滚动的代码,分享给大家供大家参考,具体内容如下 js实现上下无缝滚动的原理是这样的: 1.首先给容器设定高度或宽度,然后overflow:hidden: 2.容器高度设定后,内容超出则被隐藏. 3.改变容器的scrollTop(上下滚动)属性的值,让内容上下移动一个节点的位置(滚动的原理): 4.到滚动的高度scrollTop大于或等于要滚动节点的高度时,设置scrollTop=0,并把把子节点树中的第一个移动到最后,重新开始滚动,无间断循环滚动效果