js实现图片滑动显示效果

时间:2023-03-09 23:03:12
js实现图片滑动显示效果

                      js实现图片滑动显示效果

    今天用户提出一个需求,要实现一个滑动显示新闻列表的效果,具体就是图片新闻自动滑动显示,鼠标移上去就停止滑动,移开就继续滑动;效果如下:js实现图片滑动显示效果

第一:先用HTML和CSS实现显示,主要HTML代码如下:

        

                   <div id="demo">
<div id="indemo">
<div id="demo1">
<asp:Repeater ID="rptImgList" runat="server">
<ItemTemplate>
<div class="container">
<div class="img">
<a href='../news/news.aspx?newsId=<%#Eval("RecordId")%>' target="_blank" title='<%#Eval("NewTitle") %>'>
<%#GetContentsImg(Eval("Content")) %>
</a>
</div>
<div class="title">
<a href='../news/news.aspx?newsId=<%#Eval("RecordId")%>' target="_blank" title='<%#Eval("NewTitle") %>'>
<%#Eval("NewTitle") %></a>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<div id="demo2"></div>
</div>
</div>

第二:前台主要用到的css代码如下:

.zfNews { width:99.8%; height:334px; border:1px solid #ccc;}

#demo {overflow: hidden; width:100%; height:135px; margin-top:5px;margin-left:10px;}
#indemo {float: left;width: 800%;}
#demo1 {float: left;}
#demo2 {float: left;} #demo .container { height:100%; width:150px; float:left; margin-left:13px;}
#demo .container .img { width:100%; height:100px; float:left; border:1px solid #ccc;padding:3px;}
#demo .container .img img { width:146px; height:96px; margin:2px;}
#demo .container .title { width:100%; height:35px; line-height:35px; float:left;text-align:center;}

第三,前台页面构造好了,获取数据的方法就不写了,大同小异,现在就是用js实现图片新闻滑动效果了

1、用传统的js来实现代码如下,很简单:

     <script type="text/javascript">
var speed = 10;
var tab = document.getElementById("demo");
var tab1 = document.getElementById("demo1");
var tab2 = document.getElementById("demo2");
tab2.innerHTML = tab1.innerHTML;
function Marquee() {
if (tab2.offsetWidth - tab.scrollLeft <= 0)
tab.scrollLeft -= tab1.offsetWidth
else {
tab.scrollLeft++;
}
}
//设置定时执行
var myTime = setInterval(Marquee, speed);
tab.onmouseover = function () { clearInterval(myTime); }
tab.onmouseout = function () { myTime = setInterval(Marquee, speed); };
</script>

2.在网上看到一个用jquery实现的,就顺便借鉴了以下,Marquee.js代码如下:

(function($){
$.fn.Marquee = function(options){
var opts = $.extend({},$.fn.Marquee.defaults, options); return this.each(function(){
var $marquee = $(this);//滚动元素容器
var _scrollObj = $marquee.get(0);//滚动元素容器DOM
var scrollW = $marquee.width();//滚动元素容器的宽度
var scrollH = $marquee.height();//滚动元素容器的高度
var $element = $marquee.children(); //滚动元素
var $kids = $element.children();//滚动子元素
var scrollSize=0;//滚动元素尺寸
var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//滚动类型,1左右,0上下 //防止滚动子元素比滚动元素宽而取不到实际滚动子元素宽度
$element.css(_type?'width':'height',10000);
//获取滚动元素的尺寸
if (opts.isEqual) {
scrollSize = $kids[_type?'outerWidth':'outerHeight']() * $kids.length;
}else{
$kids.each(function(){
scrollSize += $(this)[_type?'outerWidth':'outerHeight']();
});
}
//滚动元素总尺寸小于容器尺寸,不滚动
if (scrollSize<(_type?scrollW:scrollH)) return;
//克隆滚动子元素将其插入到滚动元素后,并设定滚动元素宽度
$element.append($kids.clone()).css(_type?'width':'height',scrollSize*2); var numMoved = 0;
function scrollFunc(){
var _dir = (opts.direction == 'left' || opts.direction == 'right') ? 'scrollLeft':'scrollTop';
if (opts.loop > 0) {
numMoved+=opts.scrollAmount;
if(numMoved>scrollSize*opts.loop){
_scrollObj[_dir] = 0;
return clearInterval(moveId);
}
}
if(opts.direction == 'left' || opts.direction == 'up'){
var newPos = _scrollObj[_dir] + opts.scrollAmount;
if(newPos>=scrollSize){
newPos -= scrollSize;
}
_scrollObj[_dir] = newPos;
}else{
var newPos = _scrollObj[_dir] - opts.scrollAmount;
if(newPos<=0){
newPos += scrollSize;
}
_scrollObj[_dir] = newPos;
}
};
//滚动开始
var moveId = setInterval(scrollFunc, opts.scrollDelay);
//鼠标划过停止滚动
$marquee.hover(
function(){
clearInterval(moveId);
},
function(){
clearInterval(moveId);
moveId = setInterval(scrollFunc, opts.scrollDelay);
}
); //控制加速运动
if(opts.controlBtn){
$.each(opts.controlBtn, function(i,val){
$(val).bind(opts.eventA,function(){
opts.direction = i;
opts.oldAmount = opts.scrollAmount;
opts.scrollAmount = opts.newAmount;
}).bind(opts.eventB,function(){
opts.scrollAmount = opts.oldAmount;
});
});
}
});
};
$.fn.Marquee.defaults = {
isEqual:true,//所有滚动的元素长宽是否相等,true,false
loop: 0,//循环滚动次数,0时无限
direction: 'left',//滚动方向,'left','right','up','down'
scrollAmount:1,//步长
scrollDelay:10,//时长
newAmount:3,//加速滚动的步长
eventA:'mousedown',//鼠标事件,加速
eventB:'mouseup'//鼠标事件,原速
}; $.fn.Marquee.setDefaults = function(settings) {
$.extend( $.fn.Marquee.defaults, settings );
}; })(jQuery);

导入后前台jquery调用代码如下:

   <script type="text/javascript">
$(function () {
$("#demo").Marquee({
direction: 'left',
eventA: 'mouseenter',
eventB: 'mouseleave'
});
});
</script>

代码都比较简单,实现原理都是控制容器的scrollLeft位置。