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 相关文章推荐
不错的JS中变量相关的细节分析
Aug 13 Javascript
js网页实时倒计时精确到秒级
Feb 10 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
js获取当前日期时间及其它操作汇总
Apr 17 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
node文字生成图片的示例代码
Oct 26 Javascript
用vue快速开发app的脚手架工具
Jun 11 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 Javascript
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
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
基于mysql的论坛(5)
2006/10/09 PHP
php使用PDO方法详解
2014/12/27 PHP
php中namespace use用法实例分析
2016/01/22 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
javascript时间差插件分享
2016/07/18 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python实现二维数组的对角线遍历
2019/03/02 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python 元组的使用方法
2020/06/09 Python
Python Map 函数的使用
2020/08/28 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
大学学年自我鉴定
2013/10/28 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript