jQuery实现模拟marquee标签效果


Posted in Javascript onJuly 14, 2015

Marquee

      模仿IE下面的marquee效果,鼠标移上去暂停。形成环的主要原理在于每张图片一旦判断出了外面的显示窗口就添加到尾部,用append和prepend模拟数组的push()和shift()。

      代码如下:

HTML

<!doctype html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="" name="keywords" />
<meta content="" name="description" />
<meta name="author" content="codetker" />
<head>
<title>模拟marquee标签效果的简单实现</title>
<link href="style/reset.css" rel="stylesheet" type="text/css">
<link href="style/style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery.codetker.marquee.js"></script>
</head>

<body>
  <div class="wrap">
    <div class="marquee">
      <ul>
        <li>
          <a href="" title="">1
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">2
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">3
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">4
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">5
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">6
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">7
            <img src="images/test.jpg" alt="">
          </a>
        </li>
        <li>
          <a href="" title="">8
            <img src="images/test.jpg" alt="">
          </a>
        </li>
      </ul>
    </div>
  </div>
<script type="text/javascript">
  $(document).ready(function(){
    $(".marquee").marquee();
  });
</script>
</body>
</html>

CSS

@charset "utf-8";
/* CSS Document */
body{
  margin:0 0;
  padding:0 0;
  height:100%;
  width:100%;
}
.wrap{
  font-family:"微软雅黑","宋体", Times, "Times New Roman", serif;
  font-size:14px;
  margin:0 0;
  padding:0 0;
  height:100%;
  width:100%;
  overflow:hidden;
}
.marquee{
  margin: 0 auto;
  width: 960px;
  height: 300px;
  overflow: hidden;
}
.marquee ul{
  width: 10000px;
}
.marquee ul li{
  float: left;
  width: 500px;
  text-align: center;
}
.marquee ul li a{

}
.marquee ul li a:hover{
  color: red;
}

JavaScript

/*
 * boxScroll 0.1
 * 兼容IE8,FF,Chrome等常见浏览器
 */
 ;(function($,window,document,undefined){
   //定义构造函数
   var BoxObj=function(ele,opt){
     this.$element=ele; //最外层对象
     this.defaults={
       'style': 0 ,//滚动样式选择,默认为普通效果
       'speed': 1 ,//默认为1s
       'direction': 'left'//默认为向左边滚动
     },
   
     this.options=$.extend({},this.defaults,opt );
     //这里可以添加一些通用方法  
   }

   //给构造函数添加方法
   BoxObj.prototype={

     commonScroll:function(){
       //接收对象属性
       var obj=this.$element;
       var boxWindow=$(this.$element).children('ul');
       var speed=this.defaults.speed;
       var style=this.defaults.style;
       var direction=(this.defaults.direction=='left')? 1 : -1;
       var lists=$(boxWindow).children('li');
       var len=$(lists).length;
       var boxWidth=$(lists[0]).width();
       var timer;
       var step=(this.defaults.direction=='left')? 0 : boxWidth;

       function move(style,speed,direction){
         if (style==0) {
           if (direction==1) {
             step+=1;
             if(step>boxWidth){
               step-=boxWidth;
               $(boxWindow).append($(boxWindow).children().eq(0));//将第一项放在最后,相当于push(0),shift()
             }else{
               $(obj).scrollLeft(step);
             }
           }else if (direction== -1) {
             step-=1;
             if(step<0){
               step+=boxWidth;
               $(boxWindow).prepend($(boxWindow).children().eq(len-1));//将最后一项放在最前,相当于pop(last),unshift()
             }else{
               $(obj).scrollLeft(step);
             }
           }else{//不执行之外的数值

           }
         }else{//留待扩展,多了改switch

         }
       }

       timer=setInterval(function(){
         move(style,speed,direction);
       },10*speed); //由于时间取得小,肉眼就看不出来

      $(lists).each(function() {//鼠标移上暂停
        $(this).hover(function() {
          clearInterval(timer);
        }, function() {
          clearInterval(timer);
          timer=setInterval(function(){
             move(style,speed,direction);
           },10*speed);
        });
      });
     }
       
   }

   $.fn.marquee=function(options){
     //创建实体
     var boxObj=new BoxObj(this,options);
     //用尾调的形式调用对象方法
     return boxObj.commonScroll();
   }
 })(jQuery,window,document);

      详细下载见https://github.com/codetker/myMarquee

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
几个比较实用的JavaScript 测试及效验工具
Apr 18 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
关于跨站脚本攻击问题
Dec 22 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 Javascript
json的定义、标准格式及json字符串检验
May 11 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
JS中常用的输出方式(五种)
Jun 12 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
详解关于vue-area-linkage走过的坑
Jun 27 Javascript
JavaScript设计模型Iterator实例解析
Jan 22 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 Javascript
jQuery插件boxScroll实现图片轮播特效
Jul 14 #Javascript
jQuery自动添加表单项的方法
Jul 13 #Javascript
JavaScript去除数组里重复值的方法
Jul 13 #Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
Jul 13 #Javascript
jQuery检测返回值的数据类型
Jul 13 #Javascript
jQuery常用且重要方法汇总
Jul 13 #Javascript
C#中使用迭代器处理等待任务
Jul 13 #Javascript
You might like
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
JS 显示当前日期与时间的代码
2010/03/24 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
django-初始配置(纯手写)详解
2019/07/30 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python matplotlib库的基本使用
2020/09/23 Python
劳动实践课感言
2014/02/01 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
赔偿协议书范本
2014/09/12 职场文书
租车协议书范本2014
2014/11/17 职场文书
校长师德表现自我评价
2015/03/04 职场文书
卡特教练观后感
2015/06/08 职场文书
中秋节感想
2015/08/10 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android