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 相关文章推荐
jQuery 学习 几种常用方法
Jun 11 Javascript
基于JQuery实现CheckBox全选全不选
Jun 27 Javascript
js工具方法弹出蒙版
May 08 Javascript
简约JS日历控件 实例代码
Jul 12 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
jquery判断复选框是否被选中的方法
Oct 16 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
微信小程序自定义可滑动日历界面
Dec 28 Javascript
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
javascript中call,apply,callee,caller用法实例分析
Jul 24 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 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屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python使用爬虫猜密码
2016/02/19 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python把转列表为集合的方法
2019/06/28 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python保留小数位的三种实现方法
2020/01/07 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
求职信范文怎么写
2014/01/29 职场文书
双语教学实施方案
2014/03/23 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
一般纳税人申请报告
2015/05/18 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis