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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
关于跨站脚本攻击问题
Dec 22 Javascript
jquery命令汇总,方便使用jquery的朋友
Jun 26 Javascript
seajs1.3.0源码解析之module依赖有序加载
Nov 07 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
JavaScript中双叹号(!!)作用示例介绍
Apr 10 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
浅谈JavaScript实现面向对象中的类
Dec 09 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
JS验证不重复验证码
Feb 10 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
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个人网站架设连环讲(一)
2006/10/09 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
vue观察模式浅析
2018/09/25 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python重试装饰器示例
2014/02/11 Python
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python中requests库session对象的妙用详解
2017/10/30 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python整数对象实现原理详解
2019/07/01 Python
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
C面试题
2015/10/08 面试题
倡议书格式范文
2014/04/14 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
Python学习之包与模块详解
2022/03/19 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers