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 accordion布局
Oct 08 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 Javascript
利用js(jquery)操作Cookie的方法说明
Dec 19 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
JavaScript函数节流和函数防抖之间的区别
Feb 15 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
jQuery表单选择器用法详解
Aug 22 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
Terran魔法科技
2020/03/14 星际争霸
php生成图形(Libchart)实例
2013/11/06 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
WAF的正确bypass
2017/01/05 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
python函数形参用法实例分析
2015/08/04 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
HTML的form表单和django的form表单
2019/07/25 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
python中加背景音乐如何操作
2020/07/19 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
迪士尼西班牙官方网上商店:ShopDisney西班牙
2020/02/02 全球购物
Structs界面控制层技术
2013/10/11 面试题
园林技术个人的自我评价
2014/02/15 职场文书
2014年元旦活动方案
2014/02/15 职场文书
大班开学家长寄语
2014/04/04 职场文书
分公司经理任命书
2014/06/05 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
安全生产学习心得体会
2016/01/18 职场文书
2019年思想汇报
2019/06/20 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js