Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 169|回复: 0

[默认分类] JavaScript 无缝上下左右滚动加定高定宽停顿效果

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-6 18:33:17 | 显示全部楼层 |阅读模式
    根据
    无缝滚动
    八向滚动修改而来,特点是能同一程序中分别向四个方向移动。

    对滚动框内的样式设置有些要求。



    效果:


    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 oThis = this, oScroller = $$(idScroller), oScrollMid = $$(idScrollMid);  this.SetOptions(options); this.Side = this.options.Side || ["up"];//方向 this.scroller = oScroller;   //对象 this.speed = this.options.Speed; //速度 this.timer = null;     //时间 this.pauseHeight = 0;    //定高 this.pauseWidth = 0;    //定宽 this.pause = 0;      //定高(宽) this.side = 0;      //参数  //用于上下滚动 this.heightScroller = parseInt(oScroller.style.height) || oScroller.offsetHeight; this.heightList = oScrollMid.offsetHeight;  //用于左右滚动 this.widthScroller = parseInt(oScroller.style.width) || oScroller.offsetWidth; this.widthList = oScrollMid.offsetWidth;  //js取不到css设置的height和width  oScroller.style.overflow = "hidden"; oScrollMid.appendChild(oScrollMid.cloneNode(true)); oScrollMid.appendChild(oScrollMid.cloneNode(true));  addEventHandler(oScroller, "mouseover", function() { oThis.Stop(); }); addEventHandler(oScroller, "mouseout", function() { oThis.Start(); });  this.Start();  },  //设置默认属性  SetOptions: function(options) {    this.options = {//默认值   Step:   1,//每次变化的px量   Speed:  20,//速度(越大越慢)   Side:   ["up"],//滚动方向:"up"是上,"down"是下,"left"是左,"right"是右   PauseHeight: 0,//隔多高停一次   PauseWidth: 0,//隔多宽停一次   //当上下和左右一起使用时必须设置PauseHeight和PauseWidth来设置转向位置   PauseStep: 1000//停顿时间(PauseHeight或PauseWidth大于0该参数才有效)    };    Object.extend(this.options, options || {});  },   //转向  Turn: function() { //通过设置方向数组的排列来转向 this.Side.push(this.Side.shift().toLowerCase());  },  //上下滚动  ScrollUpDown: function() { this.pause = this.pauseHeight; this.scroller.scrollTop = this.GetScroll(this.scroller.scrollTop, this.heightScroller, this.heightList, this.options.PauseHeight); this.pauseHeight = this.pause;  var oThis = this; this.timer = window.setTimeout(function(){ oThis.Start(); }, this.speed);  },  //左右滚动  ScrollLeftRight: function() { this.pause = this.pauseWidth; //注意:scrollLeft超过1400会自动变回1400 注意长度 this.scroller.scrollLeft = this.GetScroll(this.scroller.scrollLeft, this.widthScroller, this.widthList, this.options.PauseWidth); this.pauseWidth = this.pause;  var oThis = this; this.timer = window.setTimeout(function(){ oThis.Start(); }, this.speed);  },  //获取设置滚动数据  GetScroll: function(iScroll, iScroller, iList, iPause) { var iStep = this.options.Step * this.side;  if(this.side > 0){  if(iScroll >= (iList * 2 - iScroller)){ iScroll -= iList; } } else {  if(iScroll  0){  if(Math.abs(this.pause) >= iPause){   this.speed = this.options.PauseStep; this.pause = iStep = 0; this.Turn();  } else {   this.pause += iStep;  } }  return (iScroll + iStep);  },  //开始  Start: function() {  //document.getElementById("test").innerHTML+=sTurn+",";  //方向设置 switch (this.Side[0].toLowerCase()) {  case "right" :   if(this.widthList
    .Scroller {line-height:50px; border:1px solid #000000; padding:0px 10px; height:50px; width:400px;}.Scroller *{margin:0px; padding:0px;}.ScrollMid {float:left;}.ScrollMid ul{width:800px;float:left;}.ScrollMid li{list-style:none; float:left; width:390px; padding-left:10px;line-height:50px; }


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


    new Scroller("idScroller", "idScrollMid",{ Side:["up","left"], PauseHeight:50, PauseWidth:400 });

    代码:




    <!
    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
    >
    javaScript 无缝上下左右滚动加定高定宽停顿效果(兼容ie/ff)
    </
    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 oThis = this, oScroller = $(idScroller), oScrollMid = $(idScrollMid);
       
        this.SetOptions(options);
        this.Side = this.options.Side || ["up"];//方向
        this.scroller = oScroller;            //对象
        this.speed = this.options.Speed;    //速度
        this.timer = null;                    //时间
        this.pauseHeight = 0;                //定高
        this.pauseWidth = 0;                //定宽
        this.pause = 0;                        //定高(宽)
        this.side = 0;                        //参数
       
        //用于上下滚动
        this.heightScroller = parseInt(oScroller.style.height) || oScroller.offsetHeight;
        this.heightList = oScrollMid.offsetHeight;
       
        //用于左右滚动
        this.widthScroller = parseInt(oScroller.style.width) || oScroller.offsetWidth;
        this.widthList = oScrollMid.offsetWidth;
       
        //js取不到css设置的height和width
       
        oScroller.style.overflow = "hidden";
        oScrollMid.appendChild(oScrollMid.cloneNode(true));
        oScrollMid.appendChild(oScrollMid.cloneNode(true));
       
        addEventHandler(oScroller, "mouseover", function() { oThis.Stop(); });
        addEventHandler(oScroller, "mouseout", function() { oThis.Start(); });
       
        this.Start();
      },
      //设置默认属性
      SetOptions: function(options) {
        this.options = {//默认值
          Step:            1,//每次变化的px量
          Speed:        20,//速度(越大越慢)
          Side:            ["up"],//滚动方向:"up"是上,"down"是下,"left"是左,"right"是右
          PauseHeight:    0,//隔多高停一次
          PauseWidth:    0,//隔多宽停一次
          //当上下和左右一起使用时必须设置PauseHeight和PauseWidth来设置转向位置
          PauseStep:    1000//停顿时间(PauseHeight或PauseWidth大于0该参数才有效)
        };
        Object.extend(this.options, options || {});
      },
      //转向
      Turn: function() {
        //通过设置方向数组的排列来转向
        this.Side.push(this.Side.shift().toLowerCase());
      },
      //上下滚动
      ScrollUpDown: function() {
        this.pause = this.pauseHeight;
        this.scroller.scrollTop = this.GetScroll(this.scroller.scrollTop, this.heightScroller, this.heightList, this.options.PauseHeight);
        this.pauseHeight = this.pause;
       
        var oThis = this;
        this.timer = window.setTimeout(function(){ oThis.Start(); }, this.speed);
      },
      //左右滚动
      ScrollLeftRight: function() {
        this.pause = this.pauseWidth;
        //注意:scrollLeft超过1400会自动变回1400 注意长度
        this.scroller.scrollLeft = this.GetScroll(this.scroller.scrollLeft, this.widthScroller, this.widthList, this.options.PauseWidth);
        this.pauseWidth = this.pause;
       
        var oThis = this;
        this.timer = window.setTimeout(function(){ oThis.Start(); }, this.speed);
      },
      //获取设置滚动数据
      GetScroll: function(iScroll, iScroller, iList, iPause) {
        var iStep = this.options.Step * this.side;
       
        if(this.side > 0){
            if(iScroll >= (iList * 2 - iScroller)){ iScroll -= iList; }
        } else {
            if(iScroll <= 0){ iScroll += iList; }
        }
       
        this.speed = this.options.Speed;
        if(iPause > 0){
            if(Math.abs(this.pause) >= iPause){
                this.speed = this.options.PauseStep; this.pause = iStep = 0; this.Turn();
            } else {
                this.pause += iStep;
            }
        }
       
        return (iScroll + iStep);
      },
      //开始
      Start: function() {   
        //方向设置
        switch (this.Side[0].toLowerCase()) {
            case "right" :
                if(this.widthList < this.widthScroller) return;
                this.side = -1;
                this.ScrollLeftRight();
                break;
            case "left" :
                if(this.widthList < this.widthScroller) return;
                this.side = 1;
                this.ScrollLeftRight();
                break;
            case "down" :
                if(this.heightList < this.heightScroller) return;
                this.side = -1;
                this.ScrollUpDown();
                break;
            case "up" :
            default :
                if(this.heightList < this.heightScroller) return;
                this.side = 1;
                this.ScrollUpDown();
        }
      },
      //停止
      Stop: function() {
        clearTimeout(this.timer);
      }
    };

    window.onload = function(){
        new Scroller("idScroller", "idScrollMid",{ Side:["up","left"], PauseHeight:50, PauseWidth:400 });
    }

    </
    script
    >


    <
    style
    >


    .Scroller {}{line-height:50px; border:1px solid #000000; padding:0px 10px; height:50px; width:400px;}
    .Scroller *{}{margin:0px; padding:0px;}
    .ScrollMid {}{float:left;}
    .ScrollMid ul{}{width:800px;float:left;}
    .ScrollMid li{}{list-style:none; float:left; width:390px; padding-left:10px;}

    </
    style
    >


    <
    div
    id
    ="idScroller"
      class
    ="Scroller"
      style
    ="width:400px; height:50px;"
    >

      
    <
    div
    style
    ="width:1600px"
    >

       
    <
    div
    id
    ="idScrollMid"
      class
    ="ScrollMid"
    >

          
    <
    ul
    >

            
    <
    li
    >
    111111111111
    </
    li
    >

            
    <
    li
    >
    2222222222222
    </
    li
    >

            
    <
    li
    >
    333333333333333
    </
    li
    >

            
    <
    li
    >
    4444444444444
    </
    li
    >

          
    </
    ul
    >

       
    </
    div
    >

      
    </
    div
    >


    </
    div
    >


    <
    div
    id
    ="test"
    ></
    div
    >


    </
    body
    >


    </
    html
    >






    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-2 17:17 , Processed in 0.319417 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表