转载:上下左右滚动新闻

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <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>
</head>
<body>
    <script type="text/javascript">
        var $ = function (id) {
            return typeof id == "string" ? 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) {
                //非IE false:冒泡阶段  true:
                oTarget.addEventListener(sEventType, fnHandler, false);
            } else if (oTarget.attachEvent) {
                //IE 冒泡阶段
                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.side = 0;//参数
                this.pause = 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;

                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"],//方向
                    PauseHeight: 0,//隔多高停一次
                    PauseWidth: 0,//隔多宽停一次
                    PauseStep: 1000//停顿时间
                };
                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;
                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>
    <div id="idScroller" class="Scroller" style=" 400px; height: 50px">
        <div style=" 1600px">
            <div id="idScrollMid" class="ScrollMid">
                <ul>
                    <li>滚动新闻1</li>
                    <li>滚动新闻2</li>
                    <li>滚动新闻3</li>
                    <li>滚动新闻4</li>
                    <li>滚动新闻5</li>
                    <li>滚动新闻6</li>
                </ul>
            </div>
        </div>
    </div>
</body>
</html>

转载:原文参考:http://www.cnblogs.com/cloudgamer/

原文地址:https://www.cnblogs.com/wzq806341010/p/3142728.html