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中dom操作和事件的实例学习 下拉框应用
Dec 01 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
js放大镜放大购物图片效果
Jan 18 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
JS如何设置元素样式的方法示例
Aug 28 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
Vue实现附件上传功能
May 28 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 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实现将GB编码转换为UTF8
2006/11/25 PHP
php生成文件
2007/01/15 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
JQquery的一些使用心得分享
2012/08/01 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Vue的Options用法说明
2020/08/14 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python中函数传参详解
2016/07/03 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
Django中信号signals的简单使用方法
2019/07/04 Python
python异常处理和日志处理方式
2019/12/24 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
护士实习自我鉴定
2013/10/22 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
技术总监管理职责范本
2014/03/06 职场文书
机电一体化求职信
2014/03/10 职场文书
校长四风对照检查材料
2014/09/27 职场文书
营销与策划实训报告
2014/11/05 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
小组组名及励志口号
2015/12/24 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫