純javascript實(shí)現(xiàn)四方向文本無縫滾動(dòng)效果
實(shí)現(xiàn)一個(gè)文本無縫滾動(dòng)的效果:
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html lang="zh-CN" class="ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="zh-CN" class="ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="zh-CN" class="ie8"> <![endif]-->
<!--[if IE 9 ]> <html lang="zh-CN" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="zh-CN"> <!--<![endif]-->
<head>
<title>文字滾動(dòng)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type="text/css">
*{margin:0;padding:0;}
body{padding:20px;}
.textbox{border:1px solid #ddd;width:auto;overflow: hidden;}
.textbox ul{list-style: none;position: relative;}
.textbox ul li{padding:5px 0;}
</style>
</head>
<body class="home-page">
<div id="textbox" class="textbox">
<ul>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5 </li>
<li>家居 | 這么厲害的裝修 女人真的要坐不住了</li>
<li>教育 | 各省前三報(bào)考華工重獎(jiǎng)10萬元/人</li>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5 平行進(jìn)口車加價(jià)11萬</li>
<li>健康 | 濫用激素釀苦果 14歲男孩10年不長(zhǎng)個(gè)兒</li>
<li>數(shù)碼 | 最新手機(jī)報(bào)價(jià) 說好的寬帶降費(fèi)提速呢?</li>
<li>汽車 | 平行進(jìn)口車加價(jià)11萬</li>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5</li>
<li>汽車 | 平行進(jìn)口車加價(jià)11萬</li>
<li>運(yùn)動(dòng) | 恒大亞冠生死戰(zhàn) 猜比分贏正版球衣</li>
</ul>
<a href="#" class="btnPrev">向左</a>
<a href="#" class="btnNext">向右</a>
</div>
<br>
<br>
<div id="textbox2" class="textbox">
<ul>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5 </li>
<li>家居 | 這么厲害的裝修 女人真的要坐不住了</li>
<li>教育 | 各省前三報(bào)考華工重獎(jiǎng)10萬元/人</li>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5 平行進(jìn)口車加價(jià)11萬</li>
<li>健康 | 濫用激素釀苦果 14歲男孩10年不長(zhǎng)個(gè)兒</li>
<li>數(shù)碼 | 最新手機(jī)報(bào)價(jià) 說好的寬帶降費(fèi)提速呢?</li>
<li>汽車 | 平行進(jìn)口車加價(jià)11萬</li>
<li>汽車 | 運(yùn)動(dòng)B級(jí)車降3萬5</li>
<li>汽車 | 平行進(jìn)口車加價(jià)11萬</li>
<li>運(yùn)動(dòng) | 恒大亞冠生死戰(zhàn) 猜比分贏正版球衣</li>
</ul>
<a href="#" class="btnPrev">向上</a>
<a href="#" class="btnNext">向下</a>
</div>
<script type="text/javascript" src="script/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
//四方向無縫滾動(dòng)
scroll('#textbox',{vis:2,btnHidden:false,dir:'prev',type:'h'});
scroll('#textbox2',{vis:3,btnHidden:false,dir:'prev',type:'v'});
function scroll(container,options){
var box = $(container);
var boxUl = box.find('ul').eq(0);
var LiHeight = 0; //不包含克隆li列表高度
var cloneLiHeight = 0; //包含克隆li列表高度
var LiWidth = 0; //不包含克隆li列表寬度
var cloneLiWidth = 0; //包含克隆li列表寬度
var Lis = boxUl.children();
var btnPrev = box.find('.btnPrev');
var btnNext = box.find('.btnNext');
//默認(rèn)參數(shù)
var defult= {
vis : 2, //顯示個(gè)數(shù)
autoPlay:true, //自動(dòng)播放
speed :50, //滾動(dòng)速度
dir:'prev', //滾動(dòng)方向
btnHidden:false, //按鈕是否隱藏
type:'v' // 水平或者垂直方向
};
var opt = $.extend({},defult,options);
//構(gòu)建DOM結(jié)構(gòu)
var lastClone=0; //最后克隆元素
var lastCloneHeight=0;//最后克隆元素高度
var allCloneHeight=0;//全部克隆元素總高度
var lastCloneWidth=0;
var allCloneWidth=0;
var visHeight=0; //可視高度
var visWidth=0;
var boxUl_wrap;
if(opt.type === "v"){ //垂直方向
Lis.each(function(){
$(this).height($(this).height());
LiHeight += $(this).outerHeight(true);
});
lastClone= boxUl.children(':last').clone().addClass('clone').prependTo(boxUl);
lastCloneHeight = lastClone.outerHeight(true);
allCloneHeight = lastClone.outerHeight(true);
for(var i = 0; i < opt.vis ; i++){
Lis.eq(i).clone().addClass('clone').appendTo(boxUl);
allCloneHeight += Lis.eq(i).outerHeight(true);
}
visHeight = allCloneHeight - lastCloneHeight;
cloneLiHeight = LiHeight + allCloneHeight;
boxUl_wrap = $('<div></div>').css({'width':'100%','height':visHeight,'overflow':'hidden','position':'relative'}).attr('id','ulWrap');
boxUl.css({'height':cloneLiHeight,'top':-lastCloneHeight}).wrap(boxUl_wrap);
}else if(opt.type ==="h"){ //水平方向
Lis.css({'whiteSpace':'nowrap','float':'left','paddingRight':'10px'});
Lis.each(function(){
$(this).width($(this).width());
LiWidth += $(this).outerWidth(true);
});
lastClone= boxUl.children(':last').clone().addClass('clone').prependTo(boxUl);
lastCloneWidth= lastClone.outerWidth(true);
allCloneWidth = lastClone.outerWidth(true);
for(var j = 0; j < opt.vis ; j++){
Lis.eq(j).clone().addClass('clone').appendTo(boxUl);
allCloneWidth += Lis.eq(j).outerWidth(true);
}
visHeight = Lis.eq(0).outerHeight(true);
visWidth = allCloneWidth - lastCloneWidth;
cloneLiWidth = LiWidth + allCloneWidth;
boxUl_wrap = $('<div></div>').css({'width':visWidth,'height':visHeight,'overflow':'hidden','position':'relative'}).attr('id','ulWrap');
boxUl.css({'width':cloneLiWidth,'left':-lastCloneWidth}).wrap(boxUl_wrap);
box.css({'width':visWidth});
}
//添加事件處理
var timer = null;
var scrollTop = function(){
clearInterval(timer);
timer = setInterval(function(){
var tmp = parseInt(boxUl.css('top').replace('px',""));
tmp--;
boxUl.animate({'top':tmp},0,function(){
if(tmp <= -(LiHeight + lastCloneHeight)){
boxUl.css('top',-lastCloneHeight);
}
});
},opt.speed);
};
var scrollDown = function(){
clearInterval(timer);
timer = setInterval(function(){
var tmp = parseInt(boxUl.css('top').replace('px',""));
tmp++;
boxUl.animate({'top':tmp},0,function(){
if(tmp >= 0){
boxUl.css('top',-(LiHeight));
}
});
},opt.speed);
};
var scrollLeft = function(){
clearInterval(timer);
timer = setInterval(function(){
var tmp = parseInt(boxUl.css('left').replace('px',""));
tmp--;
boxUl.animate({'left':tmp},0,function(){
if(tmp <= -(LiWidth + lastCloneWidth)){
boxUl.css('left',-(lastCloneWidth));
}
});
},opt.speed);
};
var scrollRight = function(){
clearInterval(timer);
timer = setInterval(function(){
var tmp = parseInt(boxUl.css('left').replace('px',""));
tmp++;
boxUl.animate({'left':tmp},0,function(){
if(tmp >= 0){
boxUl.css('left',-(LiWidth));
}
});
},opt.speed);
};
var scrollType = function(type,dir){
if(Lis.length >= opt.vis){ //顯示個(gè)數(shù)不能多于列表個(gè)數(shù),否則不顯示效果
var sdir = typeof dir!=="undefined" ? dir : opt.dir;
switch(type){
case "v":
if(sdir == "prev"){scrollTop();}else{scrollDown();}
break;
case "h":
if(sdir == "prev"){scrollLeft();}else{scrollRight();}
}
}
};
if(opt.autoPlay){
scrollType(opt.type);
}
//添加事件處理
box.find('#ulWrap').hover(function(){
clearInterval(timer);
},function(){
scrollType(opt.type);
});
//按鈕是否隱藏
if(!opt.btnHidden){
btnPrev.unbind('mouseover');
btnNext.unbind('mouseover');
btnPrev.mouseover(function(){
scrollType(opt.type,"prev");
});
btnNext.mouseover(function(){
scrollType(opt.type,"next");
});
}else{
btnPrev.hide();
btnNext.hide();
}
}
</script>
</body>
</html>
一些問題:
本地測(cè)試沒問題,但是 通過document.write()把代碼輸入執(zhí)行后,垂直模式下的li的高度height()獲取會(huì)有問題。原因不明,非常不解..
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- javascript實(shí)現(xiàn)自動(dòng)輸出文本(打字特效)
- js實(shí)現(xiàn)點(diǎn)擊文本框顯示日期選擇器特效代碼分享
- 隨日期每天自動(dòng)變換的文本的js特效
- javascript特殊文本輸入框網(wǎng)頁特效
- Js+CSS實(shí)現(xiàn)的間斷和不間斷文本滾動(dòng)代碼
- js實(shí)現(xiàn)文本上下來回滾動(dòng)
- js實(shí)現(xiàn)單行文本向上滾動(dòng)效果實(shí)例代碼
- js 文本滾動(dòng)效果的實(shí)例代碼
- JS實(shí)用的帶停頓的逐行文本循環(huán)滾動(dòng)效果實(shí)例
- JavaScript文本特效實(shí)例小結(jié)【3個(gè)示例】
相關(guān)文章
JS短路原理的應(yīng)用示例 精簡(jiǎn)代碼的途徑
正如標(biāo)題所言,js中||和&&的特性幫我們精簡(jiǎn)了代碼的同時(shí),也帶來了代碼可讀性的降低。這就需要我們自己來權(quán)衡了,下面有個(gè)不錯(cuò)的示例2013-12-12
原生js FileReader對(duì)象實(shí)現(xiàn)圖片上傳本地預(yù)覽效果
這篇文章主要介紹了原生js FileReader對(duì)象實(shí)現(xiàn)圖片上傳本地預(yù)覽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
利用JavaScript中的高階函數(shù)和閉包實(shí)現(xiàn)命令模式
命令模式提供了一種優(yōu)雅的解決方案,使得我們能夠靈活地封裝和管理代碼操作,所以本文將為大家介紹命令模式的概念、應(yīng)用場(chǎng)景以及在JavaScript中的實(shí)現(xiàn)方式,需要的可以參考一下2023-06-06
詳解微信小程序?qū)崿F(xiàn)仿微信聊天界面(各種細(xì)節(jié)處理)
這篇文章主要介紹了詳解微信小程序?qū)崿F(xiàn)仿微信聊天界面(各種細(xì)節(jié)處理),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
打開新窗口關(guān)閉當(dāng)前頁面不彈出關(guān)閉提示js代碼
打開新窗口關(guān)閉當(dāng)前頁面時(shí)總是彈出提示框,有沒有辦法避免它的彈出呢,答案是可以的接下來為大家分享一個(gè)方法可以解決此問題,感興趣的你可不要錯(cuò)過了哈,希望可以幫助到你2013-03-03
Weex開發(fā)之WEEX-EROS開發(fā)踩坑(小結(jié))
這篇文章主要介紹了Weex開發(fā)之WEEX-EROS開發(fā)踩坑(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
JavaScript實(shí)現(xiàn)節(jié)點(diǎn)的刪除與序號(hào)重建實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)節(jié)點(diǎn)的刪除與序號(hào)重建方法,涉及javascript針對(duì)頁面節(jié)點(diǎn)的刪除與遍歷技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08

