最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

原生javascript实现无间缝滚动示例_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:19:10
文档

原生javascript实现无间缝滚动示例_javascript技巧

原生javascript实现无间缝滚动示例_javascript技巧:目前支持的是竖向与横向滚动 http://lgyweb.com/marScroll/ 现在分析下无间缝实现的基本思路(竖向例子): HTML结构: 代码如下: 01 02 03 04 05 CSS: 代码如下: ul,li{padding: 0;margin: 0;} #marScroll{he
推荐度:
导读原生javascript实现无间缝滚动示例_javascript技巧:目前支持的是竖向与横向滚动 http://lgyweb.com/marScroll/ 现在分析下无间缝实现的基本思路(竖向例子): HTML结构: 代码如下: 01 02 03 04 05 CSS: 代码如下: ul,li{padding: 0;margin: 0;} #marScroll{he


目前支持的是竖向与横向滚动

http://lgyweb.com/marScroll/

现在分析下无间缝实现的基本思路(竖向例子):

HTML结构:
代码如下:


  • 01

  • 02

  • 03

  • 04

  • 05




  • CSS:
    代码如下:




    (1)首先需要判断里面的内容高度ul结构是否高于外层div#marScrolll,则才进行无间缝滚动:
    代码如下:
    // 写在匿名函数里面,防止全局变量污染
    (function(){
    var target = document.getElementById('marScroll'),
    oUl = target.getElementsByTagName('ul')[0];
    // 内容少,则直接退出此函数
    if(oUl.offsetHeight})();

    (2)无间缝就是内容的无限滚动展示,那么先需要复制里面的内容,然后通过外层的scrollTop++属性,用setInterval 函数进行循环执行
    代码如下:
    target.innerHTML += target.innerHTML;
    /* 判断每次滚动的距离等于第一个ul的高度时,设置scrollTop为0,然后如此的循环操作就是无间滚动了
    ---------------------------------------------------------------------------------------------*/
    // 把功能函数抽离出来,方便调用
    var fn = function(){
    if(target.scrollTop == oUl_h){
    target.scrollTop = 0;
    }else{
    target.scrollTop++;
    }
    }
    // setInterval 循环
    var timer = setInterval(function(){
    fn();
    },30);

    (3)鼠标经过此内容块时,就停止滚动
    代码如下:
    // hover
    target.onmouseover = function(){
    clearTimeout(timer);
    }
    target.onmouseout = function(){
    timer = setInterval(function(){
    fn();
    },30);
    }

    例子JS总代码:
    代码如下:
    // 写在匿名函数里面,防止全局变量污染
    (function(){
    var target = document.getElementById('marScroll'),
    oUl = target.getElementsByTagName('ul')[0],
    oUl_h = oUl.offsetHeight;
    // 内容少,则直接退出此函数
    if(oUl_htarget.innerHTML += target.innerHTML;

    /* 判断每次滚动的距离等于第一个ul的高度时,设置scrollTop为0,然后如此的循环操作就是无间滚动了
    ---------------------------------------------------------------------------------------------*/
    // 把功能函数抽离出来,方便调用
    var fn = function(){
    if(target.scrollTop == oUl_h){
    target.scrollTop = 0;
    }else{
    target.scrollTop++;
    }
    }
    // setInterval 循环
    var timer = setInterval(function(){
    fn();
    },30);
    // hover
    target.onmouseover = function(){
    clearTimeout(timer);
    }
    target.onmouseout = function(){
    timer = setInterval(function(){
    fn();
    },30);
    }
    })();

    已经完成了个简单的竖向无间缝,为了满足更多的需求,建议封装成可以,竖向,横向,多次调用的函数。

    以下是个人的封装,线上例子:

    http://lgyweb.com/marScroll/
    代码如下:
    function GyMarquee(opt){
    this.opt = opt;
    if(!document.getElementById(this.opt.targetID)) return;
    this.target = document.getElementById(this.opt.targetID);
    this.dir = this.opt.dir == 'crosswise'?'crosswise':'vertical';
    this.effect = this.opt.effect == 'scroll'?'scroll':'marque';
    this.scrollHeight = this.opt.scrollHeight;
    this.init();
    }
    GyMarquee.prototype = {
    marquee:function(){
    var _that = this,
    direction = 'scrollTop',
    judge = this.target.scrollHeight,
    timer = null;
    if(this.dir == 'crosswise'){
    direction = 'scrollLeft';
    judge = this.itemLen*this.opt.itemWidth;
    this.targetChild.style.width = this.itemLen*this.opt.itemWidth*2 + 'px';
    }
    var doFn = function(){
    if(_that.target[direction] == judge){
    _that.target[direction] = 0;
    }
    _that.target[direction]++;
    }
    timer = setInterval(function(){
    doFn();
    },38);
    this.target.onmouseover = function(){
    if(timer) clearTimeout(timer);
    }
    this.target.onmouseout = function(){
    timer = setInterval(function(){
    doFn();
    },38);
    }
    },
    scrollDo:function(){
    var can = true,
    _that = this;
    this.target.onmouseover=function(){can=false};
    this.target.onmouseout=function(){can=true};
    new function (){
    var stop=_that.target.scrollTop%_that.scrollHeight==0&&!can;
    if(!stop)_that.target.scrollTop==parseInt(_that.target.scrollHeight/2)?_that.target.scrollTop=0:_that.target.scrollTop++;
    setTimeout(arguments.callee,_that.target.scrollTop%_that.scrollHeight?20:2500);
    };
    },
    getByClassName:function(className,parent){
    var elem = [],
    node = parent != undefined&&parent.nodeType==1?parent.getElementsByTagName('*'):document.getElementsByTagName('*'),
    p = new RegExp("(^|\\s)"+className+"(\\s|$)");
    for(var n=0,i=node.length;nif(p.test(node[n].className)){
    elem.push(node[n]);
    }
    }
    return elem;
    },
    init:function(){
    var val = 0;
    if(this.dir =='crosswise'&&this.effect=='marque'&&this.opt.itemName!=''){
    this.itemLen = this.target.getElementsByTagName(this.opt.itemName).length;
    val = this.itemLen*this.opt.itemWidth;
    }else{
    val = this.target.scrollHeight;
    }
    var holderHTML = this.target.innerHTML;
    this.target.innerHTML = ''+holderHTML+'';
    this.targetChild = this.getByClassName('J_scrollInner',this.target)[0];
    var attr = this.dir == 'vertical'?'offsetHeight':'offsetWidth';
    if(val>this.target[attr]){
    if(this.effect == 'scroll'){
    this.scrollDo();
    }else{
    this.marquee();
    }
    this.targetChild.innerHTML += this.targetChild.innerHTML;
    }
    }
    }

    文档

    原生javascript实现无间缝滚动示例_javascript技巧

    原生javascript实现无间缝滚动示例_javascript技巧:目前支持的是竖向与横向滚动 http://lgyweb.com/marScroll/ 现在分析下无间缝实现的基本思路(竖向例子): HTML结构: 代码如下: 01 02 03 04 05 CSS: 代码如下: ul,li{padding: 0;margin: 0;} #marScroll{he
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top