JQuery实现页面企业广告图片切换和新闻列表滚动效果

最近用到一个页面上图片左右切换和新闻列表滚动呈现的效果,整理如下:

前段代码:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 5 <link rel="stylesheet" href="css/css.css" type="text/css" />
 6 <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
 7 <script type="text/javascript" src="js/kxbdSuperMarquee.js"></script>
 8 <script type="text/javascript" src="js/indexPic.js"></script>
 9 <script type="text/javascript">
10 jQuery(document).ready(function() {
11         $('.indexNews div.core').kxbdSuperMarquee({
12             isEqual:false,
13             distance:18,
14             time:4,
15             //btnGo:{up:'#goU',down:'#goD'},
16             direction:'up'
17         });
18     });
19 </script>
20 </script>
21 <title></title>
22 </head>
23 <body>
24 <div class="outer">
25     <div class="banner">
26         <div class="flash_img" id="fadImgs">
27             <ul class="img-box"  style="">
28                 
29                 <li><a target="_blank" href="#"><img alt="首页AD-1" src="Images/ad-1.jpg" width="1980" height="449"></a></li>
30                 
31                 <li><a target="_blank" href="#"><img alt="首页AD-2" src="images/ad-2.jpg" width="1980" height="449"></a></li>
32                 
33                 <li><a target="_blank" href="#"><img alt="首页AD-3" src="images/ad-3.jpg" width="1980" height="449"></a></li>
34                 
35                 <li><a target="_blank" href="#"><img alt="首页AD-4" src="Images/ad-4.jpg" width="1980" height="449"></a></li>
36                 
37             </ul>
38         </div>
39     </div>
40     <div class="indexNews">
41         <strong class="fl mr10"><a href="#">新闻中心</a></strong>
42         <div class="core">
43           <ul>
44             
45             <li><a href="#" title="新闻1">新闻标题1</a></li>
46             
47             <li><a href="#" title="新闻2">新闻标题2</a></li>
48             
49             <li><a href="#" title="新闻3”">新闻标题3</a></li>
50             
51             <li><a href="#" title="新闻4">新闻标题4</a></li>
52             
53             <li><a href="#" title="新闻5">新闻标题5</a></li>
54             
55           </ul>
56         </div>
57     </div>
58 </div>
59 <script type="text/javascript">
60     $(function() {
61         var len = $(".img-box li").length;
62         var imgW = $(".img-box li").width() * len;
63         $(".img-box").width(imgW);
64         $(".info_slide_dots span").hide();
65     })
66     $("#fadImgs").slideImg({
67         speed: "slow",
68         timer: 5000
69     });
70 </script>
71 </body>
72 </html>
View Code

css文件夹包含一个样式表css.css:

 1 /* reset.css */
 2 body{background:#fff;color:#444;height:100%;line-height:1.4;}
 3 html{height:100%;overflow-y:scroll;-webkit-text-size-adjust:none;}
 4 body,input,button,textarea,select,h1,h2,h3,h4,h5,h6{font:12px/1.5 Arial,Tahoma,Helvetica,"\5b8b\4f53",sans-serif;}
 5 body,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,blockquote,th,td{margin:0;padding:0;}
 6 img{vertical-align:bottom;}
 7 /* base.css */
 8 a:link,a:visited,a:hover,a:active{cursor:pointer;text-decoration:none;}
 9 a:active,a:focus {-moz-outline:none;outline:none;ie-dummy:expression(this.hideFocus=true);}
10 a:hover {text-decoration:underline;}
11 li {list-style:none;}
12 ol li {display:inline;}
13 /*common.css*/
14 .outer{position:relative; overflow:hidden; background:url(../images/line.gif) repeat-x bottom; border-bottom:solid 1px #fff; margin:0 auto;}
15 .banner{position:absolute; left:50%; top:0; margin-left:-990px; height:400px; width:1980px;overflow:hidden;}
16     .flash_img {
17         overflow: hidden;
18         width: 1980px;
19         height: 400px;
20         position: relative
21     }
22     .banner{height:400px;}
23 
24     .flash_img .img-box {
25         position: absolute;
26     }
27     .flash_img .img-box li{float:left;}
28 
29     .flash_img img {
30         display: block;
31     }
32 
33     .flash_item {
34         position: absolute;
35         right: 510px;
36         bottom: 10px;
37         height: 12px;
38     }
39 
40     .flash_item li {
41         background:url(../images/flash_item.png) no-repeat right;
42         color: #D94B01;
43         cursor: pointer;
44         float: left;
45         font-size: 12px;
46         height: 12px;
47         line-height: 12px;
48         margin-left: 15px;
49         text-align: center;
50         width: 12px;
51     }
52 
53     .flash_item li.on 
54     {
55         background-position:left;
56         color: #FFFFFF;
57         font-weight: bold;
58         height: 12px;
59         line-height: 12px;
60         width: 12px;
61     }
62 
63     .flash_item li img {
64         display: block
65     }    
66 /*default.css*/
67 .indexNews{width:700px; height:29px; bottom:0; left:50%; position:absolute; margin-left:-480px; z-index:999;}
68 .indexNews strong{color:#409dd9;float: left;}
69 .indexNews strong a{color:#409dd9;text-decoration:none;}
70 .indexNews .core{height:18px; line-height:18px; overflow:hidden;}
71 .indexNews .core span{color:#409dd9; margin-right:20px;}
72 .indexNews .core a{margin-left:10px;color:#666;}
73 .outer{height:440px;}
View Code

js文件夹包含三个文件:jquery-1.7.2.min.js、indexPic.js、kxbdSuperMarquee.js。第一个可以在网上直接下载,第二个是切换图片,第三个滚动新闻列表。

indexPic.js:

 1 document.writeln("<script type=\"text/javascript\" >BAIDU_CLB_SLOT_ID = \"586642\";</script>");
 2 document.writeln("<script type=\"text/javascript\" src=\"http://cbjs.baidu.com/js/o.js\"></script>");
 3 (function($) {
 4     $.fn.slideImg = function(settings) {
 5         settings = jQuery.extend({
 6             speed: "normal",
 7             timer: 1000
 8         }, settings);
 9         return this.each(function() {
10             $.fn.slideImg.scllor($(this), settings);
11         });
12     };
13 
14     $.fn.slideImg.scllor = function($this, settings) {
15         var index = 0;
16         var scllorer = $(".img-box li", $this);
17         var size = scllorer.size();
18         var slideW = scllorer.outerWidth();
19         var $selItem = $("<ul></ul>", {
20             "class": "flash_item",
21             html: function() {
22                 var $selItemHTML = "";
23                 if (size == 1) {
24                     return;
25                 } else if (size > 1) {
26                     for (var i = 0; i < size; i++) {
27                         i == 0 ? $selItemHTML += '<li class="on">' : $selItemHTML += '<li class=""></li>';
28                     }
29                     return $selItemHTML;
30                 }
31             }
32         }).appendTo($this);
33         var li = $(".flash_item li", $this);
34         var showBox = $(".img-box", $this);
35         var intervalTime = null;
36         li.hover(function() {
37             var that = this;
38             if (intervalTime) {
39                 clearInterval(intervalTime);
40             }
41             intervalTime = setTimeout(function() {
42                 index = li.index(that);
43                 ShowAD(index);
44             }, 200);
45         }, function() {
46             clearInterval(intervalTime);
47             interval();
48         });
49         showBox.hover(function() {
50             if (intervalTime) {
51                 clearInterval(intervalTime);
52             }
53         }, function() {
54             clearInterval(intervalTime);
55             interval();
56         });
57         function interval() {
58             intervalTime = setInterval(function() {
59                 ShowAD(index);
60                 index++;
61                 if (index == size) {
62                     index = 0;
63                 }
64             }, settings.timer);
65         }
66         interval();
67         var ShowAD = function(i) {
68             showBox.animate({ "left": -i * slideW }, settings.speed);
69             li.eq(i).addClass("on").siblings().removeClass("on");
70         };
71     };
72 })(jQuery);
View Code

kxbdSuperMarquee.js:

  1 /**
  2  * @classDescription 超级Marquee,可做图片导航,图片轮换
  3  * @author Aken Li(www.kxbd.com)
  4  * @date 2009-07-27
  5  * @dependence jQuery 1.3.2
  6  * @DOM
  7  *      <div id="marquee">
  8  *          <ul>
  9  *               <li></li>
 10  *               <li></li>
 11  *          </ul>
 12  *      </div>
 13  * @CSS
 14  *      #marquee {width:200px;height:50px;overflow:hidden;}
 15  * @Usage
 16  *      $('#marquee').kxbdSuperMarquee(options);
 17  * @options
 18  *        distance:200,//一次滚动的距离
 19  *        duration:20,//缓动效果,单次移动时间,越小速度越快,为0时无缓动效果
 20  *        time:5,//停顿时间,单位为秒
 21  *        direction: 'left',//滚动方向,'left','right','up','down'
 22  *        scrollAmount:1,//步长
 23  *        scrollDelay:20//时长,单位为毫秒
 24  *        isEqual:true,//所有滚动的元素长宽是否相等,true,false
 25  *        loop: 0,//循环滚动次数,0时无限
 26  *        btnGo:{left:'#goL',right:'#goR'},//控制方向的按钮ID,有四个属性left,right,up,down分别对应四个方向
 27  *        eventGo:'click',//鼠标事件
 28  *        controlBtn:{left:'#goL',right:'#goR'},//控制加速滚动的按钮ID,有四个属性left,right,up,down分别对应四个方向
 29  *        newAmount:4,//加速滚动的步长
 30  *        eventA:'mouseenter',//鼠标事件,加速
 31  *        eventB:'mouseleave',//鼠标事件,原速
 32  *        navId:'#marqueeNav', //导航容器ID,导航DOM:<ul><li>1</li><li>2</li><ul>,导航CSS:.navOn
 33  *        eventNav:'click' //导航事件
 34  */
 35 (function($){
 36 
 37     $.fn.kxbdSuperMarquee = function(options){
 38         var opts = $.extend({},$.fn.kxbdSuperMarquee.defaults, options);
 39         
 40         return this.each(function(){
 41             var $marquee = $(this);//滚动元素容器
 42             var _scrollObj = $marquee.get(0);//滚动元素容器DOM
 43             var scrollW = $marquee.width();//滚动元素容器的宽度
 44             var scrollH = $marquee.height();//滚动元素容器的高度
 45             var $element = $marquee.children(); //滚动元素
 46             var $kids = $element.children();//滚动子元素
 47             var scrollSize=0;//滚动元素尺寸
 48             var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//滚动类型,1左右,0上下
 49             var scrollId, rollId, isMove, marqueeId;
 50             var t,b,c,d,e; //滚动动画的参数,t:当前时间,b:开始的位置,c:改变的位置,d:持续的时间,e:结束的位置
 51             var _size, _len; //子元素的尺寸与个数
 52             var $nav,$navBtns;
 53             var arrPos = []; 
 54             var numView = 0; //当前所看子元素
 55             var numRoll=0; //轮换的次数
 56             var numMoved = 0;//已经移动的距离
 57 
 58             //防止滚动子元素比滚动元素宽而取不到实际滚动子元素宽度
 59             $element.css(_type?'width':'height',10000);
 60             //获取滚动元素的尺寸
 61             var navHtml = '<ul>';
 62             if (opts.isEqual) {
 63                 _size = $kids[_type?'outerWidth':'outerHeight']();
 64                 _len = $kids.length;
 65                 scrollSize = _size * _len;
 66                 for(var i=0;i<_len;i++){
 67                     arrPos.push(i*_size);
 68                     navHtml += '<li>'+ (i+1) +'</li>';
 69                 }
 70             }else{
 71                 $kids.each(function(i){
 72                     arrPos.push(scrollSize);
 73                     scrollSize += $(this)[_type?'outerWidth':'outerHeight']();
 74                     navHtml += '<li>'+ (i+1) +'</li>';
 75                 });
 76             }
 77             navHtml += '</ul>';
 78             
 79             //滚动元素总尺寸小于容器尺寸,不滚动
 80             if (scrollSize<(_type?scrollW:scrollH)) return; 
 81             //克隆滚动子元素将其插入到滚动元素后,并设定滚动元素宽度
 82             $element.append($kids.clone()).css(_type?'width':'height',scrollSize*2);
 83             
 84             //轮换导航
 85             if (opts.navId) {
 86                 $nav = $(opts.navId).append(navHtml).hover( stop, start );
 87                 $navBtns = $('li', $nav);
 88                 $navBtns.each(function(i){
 89                     $(this).bind(opts.eventNav,function(){
 90                         if(isMove) return;
 91                         if(numView==i) return;
 92                         rollFunc(arrPos[i]);
 93                         $navBtns.eq(numView).removeClass('navOn');
 94                         numView = i;
 95                         $(this).addClass('navOn');
 96                     });
 97                 });
 98                 $navBtns.eq(numView).addClass('navOn');
 99             }
100             
101             //设定初始位置
102             if (opts.direction == 'right' || opts.direction == 'down') {
103                 _scrollObj[_type?'scrollLeft':'scrollTop'] = scrollSize;
104             }else{
105                 _scrollObj[_type?'scrollLeft':'scrollTop'] = 0;
106             }
107             
108             if(opts.isMarquee){
109                 //滚动开始
110                 //marqueeId = setInterval(scrollFunc, opts.scrollDelay);
111                 marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
112                 //鼠标划过停止滚动
113                 $marquee.hover(
114                     function(){
115                         clearInterval(marqueeId);
116                     },
117                     function(){
118                         //marqueeId = setInterval(scrollFunc, opts.scrollDelay);
119                         clearInterval(marqueeId);
120                         marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
121                     }
122                 );
123                 
124                 //控制加速运动
125                 if(opts.controlBtn){
126                     $.each(opts.controlBtn, function(i,val){
127                         $(val).bind(opts.eventA,function(){
128                             opts.direction = i;
129                             opts.oldAmount = opts.scrollAmount;
130                             opts.scrollAmount = opts.newAmount;
131                         }).bind(opts.eventB,function(){
132                             opts.scrollAmount = opts.oldAmount;
133                         });
134                     });
135                 }
136             }else{
137                 if(opts.isAuto){
138                     //轮换开始
139                     start();
140                     
141                     //鼠标划过停止轮换
142                     $marquee.hover( stop, start );
143                 }
144             
145                 //控制前后走
146                 if(opts.btnGo){
147                     $.each(opts.btnGo, function(i,val){
148                         $(val).bind(opts.eventGo,function(){
149                             if(isMove == true) return;
150                             opts.direction = i;
151                             rollFunc();
152                             if (opts.isAuto) {
153                                 stop();
154                                 start();
155                             }
156                         });
157                     });
158                 }
159             }
160             
161             function scrollFunc(){
162                 var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop';
163                 
164                 if(opts.isMarquee){
165                     if (opts.loop > 0) {
166                         numMoved+=opts.scrollAmount;
167                         if(numMoved>scrollSize*opts.loop){
168                             _scrollObj[_dir] = 0;
169                             return clearInterval(marqueeId);
170                         } 
171                     }
172                     var newPos = _scrollObj[_dir]+(opts.direction == 'left' || opts.direction == 'up'?1:-1)*opts.scrollAmount;
173                 }else{
174                     if(opts.duration){
175                         if(t++<d){
176                             isMove = true;
177                             var newPos = Math.ceil(easeOutQuad(t,b,c,d));
178                             if(t==d){
179                                 newPos = e;
180                             }
181                         }else{
182                             newPos = e;
183                             clearInterval(scrollId);
184                             isMove = false;
185                             return;
186                         }
187                     }else{
188                         var newPos = e;
189                         clearInterval(scrollId);
190                     }
191                 }
192                 
193                 if(opts.direction == 'left' || opts.direction == 'up'){
194                     if(newPos>=scrollSize){
195                         newPos-=scrollSize;
196                     }
197                 }else{
198                     if(newPos<=0){
199                         newPos+=scrollSize;
200                     }
201                 }
202                 _scrollObj[_dir] = newPos;
203                 
204                 if(opts.isMarquee){
205                     marqueeId = setTimeout(scrollFunc, opts.scrollDelay);
206                 }else if(t<d){
207                     if(scrollId) clearTimeout(scrollId);
208                     scrollId = setTimeout(scrollFunc, opts.scrollDelay);
209                 }else{
210                     isMove = false;
211                 }
212                 
213             };
214             
215             function rollFunc(pPos){
216                 isMove = true;
217                 var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop';
218                 var _neg = opts.direction == 'left' || opts.direction == 'up'?1:-1;
219 
220                 numRoll = numRoll +_neg;
221                 //得到当前所看元素序号并改变导航CSS
222                 if(pPos == undefined&&opts.navId){
223                     $navBtns.eq(numView).removeClass('navOn');
224                     numView +=_neg;
225                     if(numView>=_len){
226                         numView = 0;
227                     }else if(numView<0){
228                         numView = _len-1;
229                     }
230                     $navBtns.eq(numView).addClass('navOn');
231                     numRoll = numView;
232                 }
233 
234                 var _temp = numRoll<0?scrollSize:0;
235                 t=0;
236                 b=_scrollObj[_dir];
237                 //c=(pPos != undefined)?pPos:_neg*opts.distance;
238                 e=(pPos != undefined)?pPos:_temp+(opts.distance*numRoll)%scrollSize;
239                 if(_neg==1){
240                     if(e>b){
241                         c = e-b;
242                     }else{
243                         c = e+scrollSize -b;
244                     }
245                 }else{
246                     if(e>b){
247                         c =e-scrollSize-b;
248                     }else{
249                         c = e-b;
250                     }
251                 }
252                 d=opts.duration;
253                 
254                 //scrollId = setInterval(scrollFunc, opts.scrollDelay);
255                 if(scrollId) clearTimeout(scrollId);
256                 scrollId = setTimeout(scrollFunc, opts.scrollDelay);
257             }
258             
259             function start(){
260                 rollId = setInterval(function(){
261                     rollFunc();
262                 }, opts.time*1000);
263             }
264             function stop(){
265                 clearInterval(rollId);
266             }
267             
268             function easeOutQuad(t,b,c,d){
269                 return -c *(t/=d)*(t-2) + b;
270             }
271             
272             function easeOutQuint(t,b,c,d){
273                 return c*((t=t/d-1)*t*t*t*t + 1) + b;
274             }
275 
276         });
277     };
278     $.fn.kxbdSuperMarquee.defaults = {
279         isMarquee:false,//是否为Marquee
280         isEqual:true,//所有滚动的元素长宽是否相等,true,false
281         loop: 0,//循环滚动次数,0时无限
282         newAmount:3,//加速滚动的步长
283         eventA:'mousedown',//鼠标事件,加速
284         eventB:'mouseup',//鼠标事件,原速
285         isAuto:true,//是否自动轮换
286         time:5,//停顿时间,单位为秒
287         duration:50,//缓动效果,单次移动时间,越小速度越快,为0时无缓动效果
288         eventGo:'click', //鼠标事件,向前向后走
289         direction: 'left',//滚动方向,'left','right','up','down'
290         scrollAmount:1,//步长
291         scrollDelay:10,//时长
292         eventNav:'click'//导航事件
293     };
294     
295     $.fn.kxbdSuperMarquee.setDefaults = function(settings) {
296         $.extend( $.fn.kxbdSuperMarquee.defaults, settings );
297     };
298     
299 })(jQuery);
View Code

images文件夹里需要的一个图标,用于在广告图片右下角指示图片当前选中/未选中的状态:

第一次发布博客,预览不知道怎么写。

特别说明,本效果原始代码拷贝自一个企业网站http://www.gato.com.cn/,略加整理。

转载于:https://www.cnblogs.com/mannixiang/p/3340799.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值