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函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
Mar 27 Javascript
datagrid框架的删除添加与修改
Apr 08 Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 Javascript
推荐10个2014年最佳的jQuery视频插件
Nov 12 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
使用layer模态框给新页面传值的方法
Sep 27 Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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程序设计中的MVC编程思想
2014/07/28 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
canvas实现钟表效果
2017/02/13 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
基于Vue制作组织架构树组件
2017/12/06 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
python3实现弹弹球小游戏
2019/11/25 Python
vue常用指令代码实例总结
2020/03/16 Python
Python matplotlib可视化实例解析
2020/06/01 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
倡议书格式
2014/04/14 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
坎儿井导游词
2015/02/09 职场文书
门店店长岗位职责
2015/04/14 职场文书
格林童话读书笔记
2015/06/30 职场文书
技能培训通讯稿
2015/07/18 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript