JS实现的自定义水平滚动字体插件完整实例


Posted in Javascript onJune 17, 2016

本文实例讲述了JS自定义水平滚动字体插件。分享给大家供大家参考,具体如下:

<script type="text/javascript">
  $(function(){
    var setting = {
      content : "  @@@@@浮动文字####  ",
      overStop : true,
      width:"100px",
      targetId:"huangbiao",
      //显示之后的回调函数
      onAfterShow : function(obj){
        obj.setting.width = "20px";
//        alert("dddd");
        //修改配置文件之后重新设置
//        obj.init();
        //删除动态添加的内容
//        obj.remove();
      }
    };
    var ooo = new fontMove(setting);
    //重新设置
//    ooo.setting.width = "20px;"
//    ooo.init();
  });
  /*
  原理说明:
  1、top父div 是隐藏滚动条的
  2、二级DIV(top 父div 的子 div )宽度是 8000%
  3、三级子div有两个,分别是div1(最左边) 和 div2(第二个左边) 且节点内容完全一样,分别都是向left浮动
  4、设置一个定时器,top div的滚动条向左滚动1px
  5、一旦top div滚动条的长度 大于或者等于 div2的滚动条的距离,就让top div的滚动条的距离为0
   */
  function fontMove(userSettingObj){
    var that = this;
    //用时间戳作为id值
    var timestamp = new Date().getTime();
    this.setting = {
      //滚动的文字内容
      content : "浮动文字",
      //滚动条显示的宽度
      width:"200px",
      //每30毫秒执行一次
      speed : 30,
      //鼠标悬浮是否停止,true是,false为不停,默认是true
      overStop : true,
      //滚动条的ID值
      objId : timestamp,
      //将空间存放的目标位置,如果为"",则默认是放在body标签的最后面
      targetId : "",
      onAfterShow:function(){
      }
    };
    //得到用户的配置文件
    this.setting = $.extend(this.setting,userSettingObj);
    //检查配置文件的参数
    this.checkParam = function(){
    }
    //扩展插件
    this.callback = function(myfun){
      if(typeof myfun == "function"){
        //this 代表callback ,因此需要使用 parent
        myfun.call(that);
      }
    }
    this.remove = function(){
      $("#"+that.setting.objId).remove();
    }
    this.init = function(){
      //所有想获取配置文件的方法是使用that.setting
      var domStr = '<div id="' + that.setting.objId + '" style="overflow:hidden;width:'+that.setting.width+'">'+
       '<div style="width:8000%;">'+
         '<div id="' + that.setting.objId + '_div1" style="float:left;">'+that.setting.content+
         '</div>'+
         '<div id="' + that.setting.objId + '_div2" style="float:left;">'+that.setting.content+'</div>'+
         '</div>'+
       '</div>'+
     '</div>';
      //判断是否指明了内容存放的位置
      if(""==that.setting.targetId){
        $("body").append(domStr);
      }else{
        $("#"+that.setting.targetId).html(domStr);
      }
      //内容容器div
      var thatDiv = document.getElementById(that.setting.objId);
      //左边第一个子div
      var sonDiv1 = document.getElementById(that.setting.objId + '_div1');
      //左边第二个子div
      var sonDiv2 = document.getElementById(that.setting.objId + '_div2');
      this.Marquee = function(){
        //利用定时器改变值
//        console.log("thatDiv.scrollLeft : " + thatDiv.scrollLeft);
//        //sonDiv1.offsetWidth 值固定不变
//        console.log("sonDiv1.offsetWidth : " + sonDiv1.offsetWidth);
//        //值永远为0,因为它没有滚动条
//        console.log("sonDiv1.scrollLeft : " + sonDiv1.scrollLeft);
//        //sonDiv2.offsetWidth 值固定不变
//        console.log("sonDiv2.offsetWidth : " + sonDiv2.offsetWidth);
//        //值永远为0,因为它没有滚动条
//        console.log("sonDiv2.scrollLeft : " + sonDiv2.scrollLeft);
        //top div滚动条的距离 是否 大于 第一个子div的水平距离,即是否大于内容的实际距离
        if(thatDiv.scrollLeft - sonDiv1.offsetWidth >= 0){
          //滚动条的长度重新清0,相当于又是从第一个div显示,然后向左滚动
          thatDiv.scrollLeft = thatDiv.scrollLeft - sonDiv1.offsetWidth;
        }
        else{
          thatDiv.scrollLeft++;
        }
      }
      var myvar=setInterval(that.Marquee,that.setting.speed);
      //鼠标悬浮,是否停止运动
      if(that.setting.overStop){
        thatDiv.onmouseover=function(){clearInterval(myvar);}
        thatDiv.onmouseout=function (){myvar=setInterval(Marquee,30);}
      }
      if(typeof that.setting.onAfterShow == "function"){
        that.setting.onAfterShow.call(that,that);
      }
    }
    //完成初始化
    this.init();
    //返回方法本身,这样可以获取所有配置this的参数
    return this;
  }
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Dom在ajax技术中的作用说明
Oct 25 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
JS函数定义方式的区别介绍
Mar 22 Javascript
微信小程序 request接口的封装实例代码
Apr 26 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
微信小程序实现炫酷的弹出式菜单特效
Jan 28 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
vue自定义指令用法经典实例小结
Mar 16 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 #Javascript
基于JS实现导航条flash导航条
Jun 17 #Javascript
基于JS代码实现导航条弹出式悬浮菜单
Jun 17 #Javascript
Javascript中的数组常用方法解析
Jun 17 #Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 #Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
Jun 17 #Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 #Javascript
You might like
php 无限分类 树形数据格式化代码
2016/10/11 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
JS前端加密算法示例
2016/12/22 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
10个经典的网页鼠标特效代码
2018/01/09 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
python中return的返回和执行实例
2019/12/24 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
关于Java finally的面试题
2016/04/27 面试题
毕业自我鉴定
2013/11/05 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
军训自我鉴定范文
2014/02/13 职场文书
政工例会汇报材料
2014/08/26 职场文书
先进员工事迹材料
2014/12/20 职场文书
赤壁观后感(2)
2015/06/15 职场文书
创业计划书之养殖业
2019/10/11 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android