• jQuery模拟百度新闻不间断滚动效果,支持文字、图片水平垂直滚动


    一、jQuery.roll 插件使用说明

    jQuery.roll 是模拟百度新闻不间断滚动效果,并支持文字、图片水平垂直滚动,该函数使用方法为:

    /*
     * @作者 华子yjh http://www.cnblogs.com/yangjunhua/
     * @source 博客园
     * @module jQuery roll
     * @param: contentCls 内容容器className
     * @param: contentParentId 内容容器父元素节点ID
     * @param: configs 配置参数
     * 
     * @config: effect 滚动效果
     * @config: duration 滚动1个像素的运行时间(毫秒数)
     * @config: delay 开始滚动的延迟时间(毫秒数)
     *
     */
    
    jQuery.roll(contentCls, contentParentId, configs); 

    二、函数源码

     1 jQuery.extend({
     2     roll: function(contentCls, contentParentId, configs){
     3 
     4         var setTimeID, totalWidth = 0, totalHeight = 0,
     5             firstContent, secondContent, contents;
     6 
     7         (function(){
     8             var singleContent, cloneContent, nodeList;
     9 
    10             singleContent = $(contentCls, contentParentId);
    11             nodeList = singleContent.children();
    12 
    13             if (configs.effect === 'scrollX') {
    14                 $.each(nodeList, function(idx, itm) {
    15                     totalWidth += $(itm).outerWidth(true);
    16                 });
    17                 singleContent.css({ 'width': totalWidth + 'px' });
    18             }
    19             else if (configs.effect === 'scrollY') {
    20                 $.each(nodeList, function(idx, itm) {
    21                     totalHeight += $(itm).outerHeight(true);
    22                 });
    23                 singleContent.css({ 'height': totalHeight + 'px' });
    24             }
    25 
    26             cloneContent = singleContent.clone();
    27             cloneContent.appendTo(contentParentId);
    28 
    29             contents = $(contentCls, contentParentId);
    30             firstContent = contents[0];
    31             secondContent = contents[1];
    32             
    33             if (configs.effect === 'scrollX') {
    34                 $(firstContent).css({ 'left': 0 });
    35                 $(secondContent).css({ 'left': totalWidth + 'px' });
    36             }
    37             else if (configs.effect === 'scrollY') {
    38                 $(firstContent).css({ 'top': 0 });
    39                 $(secondContent).css({ 'top': totalHeight + 'px' });
    40             }
    41 
    42         })()
    43         
    44         function cssAnimate(){
    45             if (configs.effect === 'scrollX') {
    46                 $(firstContent).css({ left: parseInt(firstContent.style.left, 10) - 1 + 'px' });
    47                 $(secondContent).css({ left: parseInt(secondContent.style.left, 10) - 1 + 'px' });
    48             
    49                 $.each(contents, function(idx, itm) {
    50                     if (parseInt(itm.style.left,10) === -totalWidth) {
    51                         $(itm).css({ left: totalWidth + 'px' });
    52                     }
    53                 });
    54             }
    55             else if (configs.effect === 'scrollY') {
    56                 $(firstContent).css({ top: parseInt(firstContent.style.top, 10) - 1 + 'px' });
    57                 $(secondContent).css({ top: parseInt(secondContent.style.top, 10) - 1 + 'px' });
    58             
    59                 $.each(contents, function(idx, itm) {
    60                     if (parseInt(itm.style.top,10) === -totalHeight) {
    61                         $(itm).css({ top: totalHeight + 'px' });
    62                     }
    63                 });
    64             }
    65 
    66             setTimeId = setTimeout(cssAnimate, configs.duration);
    67         }
    68         
    69         function rollRun(){
    70             setTimeId = setTimeout(cssAnimate, configs.delay);
    71             return jQuery;
    72         }
    73         
    74         function rollStop(){
    75             clearTimeout(setTimeId);
    76             return jQuery;
    77         }
    78 
    79         return $.extend({
    80             rollRun: rollRun,
    81             rollStop: rollStop
    82         });
    83     }    
    84 });

    三、完整demo源码

    例3.1

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="description" content="jQuery实现无间隙滚动效果">
    <title>jQuery demo</title>
    <style>
    body { font: 12px/1.5 tahoma,"microsoft yahei","微软雅黑E\8F6F\96C5\9ED1"; }
    body, div, ul, li, h1 { margin: 0; padding: 0; }
    .news { margin: 100px 0 0 100px; }
    .news ul { list-style: none; }
    .news-box { width: 600px; margin-left: 20px; height: 24px; background-color: #fcfcfd; overflow: hidden; position: relative; _zoom: 1; }
    .news h1 {  margin-bottom: 15px; padding-left: 20px; color: #370188; }
    .news-list { position: absolute; }
    .news-list { float: left; }
    .news-list li { float: left; _display: inline; margin-right: 15px; height: 24px; line-height: 24px; overflow: hidden; word-wrap: normal; }
    .news-list li a { text-decoration: none; color: #000; }
    .news-list li a:hover {
        -webkit-transition: color .2s linear,background-color .3s linear;
        -moz-transition: color .2s linear,background-color .3s linear;
        -ms-transition: color .2s linear,background-color .3s linear;
        -o-transition: color .2s linear,background-color .3s linear;
        transition: color .2s linear,background-color .3s linear;
        color: #FF4400;
        text-decoration: underline;
    }
    .news-list li a:visited { color: #290065; }
    </style>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
    <div id="J_news" class="news">
        <h1>文字列表滚动</h1>
        <div id="J_Roll_Container" class="news-box">
            <ul class="J_Roll_Content news-list">
                <li><a href="http://news.sina.com.cn/c/2013-01-10/121926003955.shtml" target="_blank">日方否认将对中国巡航钓鱼岛飞机</a></li>
                <li><a href="http://news.hf365.com/system/2013/01/10/012875943.shtml" target="_blank">日本防卫省否认将对中国飞机警告射击(图)</a></li>
                <li><a href="http://news.21cn.com/world/guojisaomiao/2013/01/10/14338977.shtml" target="_blank">日否认警告射击中海监飞机 恐中日因夺岛开战</a></li>
            </ul>    
        </div>
    </div>
    <script>
    // 这里引用jQuery.roll代码
    </script>
    <script>
    $(function(){
        var roll_jQuery, contents;
    
        roll_jQuery = $.roll('.J_Roll_Content', '#J_Roll_Container', { effect: 'scrollX', duration: 40, delay: 500 }).rollRun();
        contents = $('.J_Roll_Content');
    
        contents.bind('mouseenter', function(){
            roll_jQuery.rollStop();
        });
        contents.bind('mouseleave', function(){
            roll_jQuery.rollRun();
        });
    });
    </script>
    </body>
    </html>

    例3.2

    View Code
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta name="description" content="jQuery实现无间隙滚动效果">
    <title>jQuery demo</title>
    <style>
    body { font: 12px/1.5 tahoma, "microsoft yahei", "微软雅黑E\8F6F\96C5\9ED1"; }
    body, div, ul, li, h1 { margin: 0; padding: 0; }
    .news { margin: 100px 0 0 100px; }
    .news ul { list-style: none; }
    .news-box { padding: 20px; width: 310px; height: 192px; background-color: #fcfcfd; overflow: hidden; position: relative; }
    .news h1 { margin-bottom: 15px; padding-left: 20px; color: #370188; }
    .news-list { position: absolute; }
    .news-list li { width: 100%; height: 24px; line-height: 24px; overflow: hidden; word-wrap: normal; }
    .news-list li a { text-decoration: none; color: #000; }
    .news-list li a:hover {
        -webkit-transition: color .2s linear, background-color .3s linear;
        -moz-transition: color .2s linear, background-color .3s linear;
        -ms-transition: color .2s linear, background-color .3s linear;
        -o-transition: color .2s linear, background-color .3s linear;
        transition: color .2s linear, background-color .3s linear;
        color: #FF4400;
        text-decoration: underline;
    }
    .news-list li a:visited { color: #290065; }
    </style>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
    <div id="J_news" class="news">
      <h1>文字列表滚动</h1>
      <div id="J_Roll_Container" class="news-box">
        <ul class="J_Roll_Content news-list">
          <li><a href="http://news.ifeng.com/world/detail_2013_01/11/21098447_0.shtml" target="_blank">在澳中国留学生涉嫌接送非法色情业者赚外快被罚</a></li>
          <li><a href="http://news.qq.com/a/20130111/000993.htm" target="_blank">印度北部等今冬遭遇极寒天气 已致数百人被冻死</a></li>
          <li><a href="http://news.qq.com/a/20130111/001251.htm" target="_blank">意大利警方禁止挂中国红灯笼 被指危险引燃物</a></li>
          <li><a href="http://news.sina.com.cn/c/2013-01-10/121926003955.shtml" target="_blank">日方否认将对中国巡航钓鱼岛飞机</a></li>
          <li><a href="http://news.hf365.com/system/2013/01/10/012875943.shtml" target="_blank">日本防卫省否认将对中国飞机警告射击(图)</a></li>
          <li><a href="http://news.21cn.com/world/guojisaomiao/2013/01/10/14338977.shtml" target="_blank">日否认警告射击中海监飞机 恐中日因夺岛开战</a></li>
          <li><a href="http://military.people.com.cn/n/2013/0110/c1011-20150261.html" target="_blank">传解放军举行长白山军演</a></li>
          <li><a href="http://news.21cn.com/world/guojisaomiao/2013/01/10/14335623.shtml" target="_blank">中国高新6号反潜机问世 反潜艇性能优于美军P-3C</a></li>
          <li><a href="http://opinion.huanqiu.com/opinion_world/2013-01/3467875.html" target="_blank">张建刚:2030年中国将圆海洋强国梦</a></li>
          <li><a href="http://news.hf365.com/system/2013/01/10/012873928.shtml" target="_blank">运-20现身试飞中心 可取代伊尔-76任何功能</a></li>
          <li><a href="http://mil.sohu.com/20130110/n362988784.shtml" target="_blank">东海舰队引入大批无人机 饱和攻击让日难以招架</a></li>
        </ul>
      </div>
    </div>
    <script>
    jQuery.extend({
        roll: function(contentCls, contentParentId, configs){
    
            var setTimeID, totalWidth = 0, totalHeight = 0,
                firstContent, secondContent, contents;
    
            (function(){
                var singleContent, cloneContent, nodeList;
    
                singleContent = $(contentCls, contentParentId);
                nodeList = singleContent.children();
    
                if (configs.effect === 'scrollX') {
                    $.each(nodeList, function(idx, itm) {
                        totalWidth += $(itm).outerWidth(true);
                    });
                    singleContent.css({ 'width': totalWidth + 'px' });
                }
                else if (configs.effect === 'scrollY') {
                    $.each(nodeList, function(idx, itm) {
                        totalHeight += $(itm).outerHeight(true);
                    });
                    singleContent.css({ 'height': totalHeight + 'px' });
                }
    
                cloneContent = singleContent.clone();
                cloneContent.appendTo(contentParentId);
    
                contents = $(contentCls, contentParentId);
                firstContent = contents[0];
                secondContent = contents[1];
                
                if (configs.effect === 'scrollX') {
                    $(firstContent).css({ 'left': 0 });
                    $(secondContent).css({ 'left': totalWidth + 'px' });
                }
                else if (configs.effect === 'scrollY') {
                    $(firstContent).css({ 'top': 0 });
                    $(secondContent).css({ 'top': totalHeight + 'px' });
                }
    
            })()
            
            function cssAnimate(){
                if (configs.effect === 'scrollX') {
                    $(firstContent).css({ left: parseInt(firstContent.style.left, 10) - 1 + 'px' });
                    $(secondContent).css({ left: parseInt(secondContent.style.left, 10) - 1 + 'px' });
                
                    $.each(contents, function(idx, itm) {
                        if (parseInt(itm.style.left,10) === -totalWidth) {
                            $(itm).css({ left: totalWidth + 'px' });
                        }
                    });
                }
                else if (configs.effect === 'scrollY') {
                    $(firstContent).css({ top: parseInt(firstContent.style.top, 10) - 1 + 'px' });
                    $(secondContent).css({ top: parseInt(secondContent.style.top, 10) - 1 + 'px' });
                
                    $.each(contents, function(idx, itm) {
                        if (parseInt(itm.style.top,10) === -totalHeight) {
                            $(itm).css({ top: totalHeight + 'px' });
                        }
                    });
                }
    
                setTimeId = setTimeout(cssAnimate, configs.duration);
            }
            
            function rollRun(){
                setTimeId = setTimeout(cssAnimate, configs.delay);
                return jQuery;
            }
            
            function rollStop(){
                clearTimeout(setTimeId);
                return jQuery;
            }
    
            return $.extend({
                rollRun: rollRun,
                rollStop: rollStop
            });
        }    
    });
    </script> 
    <script>
    $(function(){
        var roll_jQuery, contents;
    
        roll_jQuery = $.roll('.J_Roll_Content', '#J_Roll_Container', { effect: 'scrollY', duration: 40, delay: 500 }).rollRun();
        contents = $('.J_Roll_Content');
    
        contents.bind('mouseenter', function(){
            roll_jQuery.rollStop();
        });
        contents.bind('mouseleave', function(){
            roll_jQuery.rollRun();
        });
    });
    </script>
    </body>
    </html>

    转载请注明出处【作者:华子yjh原文链接 

  • 相关阅读:
    Eclipse设置打开的默认浏览器
    Java | 源文件
    博客园--个人博客背景设置
    MYSQL | 修改密码
    博客园首秀----Markdown
    Redis@Redis
    网络编程@Socket网络编程
    JVM@JVM基础
    并发编程@Disruptor并发框架
    并发编程@并发编程高级
  • 原文地址:https://www.cnblogs.com/yangjunhua/p/2856556.html
Copyright © 2020-2023  润新知