js實(shí)現(xiàn)圖片滑動(dòng)顯示效果
成都創(chuàng)新互聯(lián)從2013年成立,先為承德縣等服務(wù)建站,承德縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為承德縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。今天用戶提出一個(gè)需求,要實(shí)現(xiàn)一個(gè)滑動(dòng)顯示新聞列表的效果,具體就是圖片新聞自動(dòng)滑動(dòng)顯示,鼠標(biāo)移上去就停止滑動(dòng),移開(kāi)就繼續(xù)滑動(dòng);效果如下:
第一:先用HTML和CSS實(shí)現(xiàn)顯示,主要HTML代碼如下:
第二:前臺(tái)主要用到的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;}
第三,前臺(tái)頁(yè)面構(gòu)造好了,獲取數(shù)據(jù)的方法就不寫了,大同小異,現(xiàn)在就是用js實(shí)現(xiàn)圖片新聞滑動(dòng)效果了
1、用傳統(tǒng)的js來(lái)實(shí)現(xiàn)代碼如下,很簡(jiǎn)單:
2.在網(wǎng)上看到一個(gè)用jquery實(shí)現(xiàn)的,就順便借鑒了以下,Marquee.js代碼如下:
(function($){
$.fn.Marquee= function(options){
var opts = $.extend({},$.fn.Marquee.defaults, options);
return this.each(function(){
var $marquee = $(this);//滾動(dòng)元素容器 var _scrollObj = $marquee.get(0);//滾動(dòng)元素容器DOM var scrollW = $marquee.width();//滾動(dòng)元素容器的寬度 var scrollH = $marquee.height();//滾動(dòng)元素容器的高度 var $element = $marquee.children(); //滾動(dòng)元素 var $kids = $element.children();//滾動(dòng)子元素 var scrollSize=0;//滾動(dòng)元素尺寸 var _type = (opts.direction == 'left' || opts.direction == 'right') ? 1:0;//滾動(dòng)類型,1左右,0上下 //防止?jié)L動(dòng)子元素比滾動(dòng)元素寬而取不到實(shí)際滾動(dòng)子元素寬度 $element.css(_type?'width':'height',10000);
//獲取滾動(dòng)元素的尺寸 if (opts.isEqual) {
scrollSize= $kids[_type?'outerWidth':'outerHeight']() * $kids.length;
}else{
$kids.each(function(){
scrollSize+= $(this)[_type?'outerWidth':'outerHeight']();
});
}
//滾動(dòng)元素總尺寸小于容器尺寸,不滾動(dòng) if (scrollSize<(_type?scrollW:scrollH)) return;
//克隆滾動(dòng)子元素將其插入到滾動(dòng)元素后,并設(shè)定滾動(dòng)元素寬度 $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;
}
};
//滾動(dòng)開(kāi)始 var moveId = setInterval(scrollFunc, opts.scrollDelay);
//鼠標(biāo)劃過(guò)停止?jié)L動(dòng) $marquee.hover(
function(){
clearInterval(moveId);
},
function(){
clearInterval(moveId);
moveId= setInterval(scrollFunc, opts.scrollDelay);
}
);
//控制加速運(yùn)動(dòng) 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,//所有滾動(dòng)的元素長(zhǎng)寬是否相等,true,false loop: 0,//循環(huán)滾動(dòng)次數(shù),0時(shí)無(wú)限 direction: 'left',//滾動(dòng)方向,'left','right','up','down' scrollAmount:1,//步長(zhǎng) scrollDelay:10,//時(shí)長(zhǎng) newAmount:3,//加速滾動(dòng)的步長(zhǎng) eventA:'mousedown',//鼠標(biāo)事件,加速 eventB:'mouseup'//鼠標(biāo)事件,原速 };
$.fn.Marquee.setDefaults= function(settings) {
$.extend( $.fn.Marquee.defaults, settings );
};
})(jQuery);
導(dǎo)入后前臺(tái)jquery調(diào)用代碼如下:
代碼都比較簡(jiǎn)單,實(shí)現(xiàn)原理都是控制容器的scrollLeft位置。