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异步循环获取功能实现代码
Sep 19 Javascript
jQuery中get()方法用法实例
Dec 27 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
javascript深拷贝(deepClone)详解
Aug 24 Javascript
js实现String.Fomat的实例代码
Sep 02 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 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循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
PHP源码之explode使用说明
2011/08/05 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
Python的gevent框架的入门教程
2015/04/29 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
基于python实现简单日历
2018/07/28 Python
python制作简单五子棋游戏
2019/06/18 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
线程同步的方法
2016/11/23 面试题
毕业实习个人鉴定范文
2013/12/10 职场文书
个人求职信范文分享
2014/01/06 职场文书
应届电子商务毕业自荐书范文
2014/02/11 职场文书
体育教学随笔感言
2014/02/24 职场文书
三项教育活动实施方案
2014/03/30 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
李开复演讲稿
2014/05/24 职场文书
通报表扬范文
2015/01/17 职场文书
百家讲坛观后感
2015/06/12 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书