焦點輪播圖的方式和不同思路

最近整理了一下輪播圖的需求以及不同的輪播圖所用方式的比較靖诗。
制作輪播圖首先要理清思路龟糕,然后實踐起來就會很easy啦,下面總結(jié)一下遇到的需求和具體解決方法士飒。

1查邢、 點擊或者鼠標(biāo)劃過時顯示對應(yīng)的圖片
輪播.gif

這種模式比較簡單,屬于最基礎(chǔ)的點擊切換圖片酵幕,
html布局

<div id="box">
    <ul>
        <li style='display:block'>![](1.jpg)</li>
        <li>![](2.jpg)</li>
        <li>![](3.jpg)</li>
    </ul>
    <ol>
        <li class="active">1</li>
        <li>2</li>
        <li>3</li>
    </ol>
</div>

主要思路:圖片的display為none扰藕,點擊對應(yīng)按鈕時使對應(yīng)圖片的display為block。

window.onload=function(){
            var uli=document.getElementsByTagName('ul')[0].getElementsByTagName('li');
            var oli=document.getElementsByTagName('ol')[0].getElementsByTagName('li');
            for (var i = 0; i < oli.length; i++) {
                oli[i].index=i;
                oli[i].onmouseover=function(){
                    for (var i = 0; i < oli.length; i++) {
                        oli[i].className='';
                        uli[i].style.display='none';
                    }
                    this.className='active';
                    uli[this.index].style.display='block';
                }
            }
        }
2裙盾、淡入淡出效果
淡入淡出.gif

做淡入淡出效果的布局主要是利用定位实胸,先將幾張圖片采用absolute定位他嫡,并將display設(shè)置為none番官,初始的透明度opacity設(shè)置為0.需要顯示哪張就將他的display設(shè)置為block,并將透明度設(shè)置為1钢属;

window.onload=function(){
            var uli=document.getElementsByTagName('ul')[0].getElementsByTagName('li');
            var oli=document.getElementsByTagName('ol')[0].getElementsByTagName('li');
            for (var i = 0; i < oli.length; i++) {
                oli[i].index=i;
                oli[i].onmouseover=function(){
                    for (var i = 0; i < oli.length; i++) {
                        oli[i].className='';
                        uli[i].style.display='none';
                        startMove(uli[i],{opacity:0},function(){
                            this.style.display='none';
                        })
                    }
                    this.className='active';
                    uli[this.index].style.display='block';
                    startMove(uli[this.index],{opacity:100})
                }
            }
        }
3徘熔、自動播放
自動播放無縫連接.gif

實現(xiàn)自動播放主要設(shè)置一個定時器,每2s自動播放下一張圖片淆党,播放到最后一張轉(zhuǎn)到第一張圖片時需要使用無縫銜接酷师,有幾種思路

  • 首尾復(fù)制圖片讶凉,到首尾的時候再拉取到最初的位置,但這樣做有點麻煩
  • 第二種做法是采用定位山孔,當(dāng)播放到最后一張圖片時懂讯,將第一張圖片定位到最后一張下面,要采用relative定位台颠,不能用absolute褐望,再播放完后在拉取到最初的位置。我采用的是第二種做法串前。
window.onload = function() {
        var uli = document.getElementsByTagName('ul')[0].getElementsByTagName('li');
        var oli = document.getElementsByTagName('ol')[0].getElementsByTagName('li');
        var ul = document.getElementsByTagName('ul')[0];
        var box=document.getElementById('box');
        var onePicHeight = uli[0].offsetHeight;
        var iNow = 0;
        var iNow2=0;
        for (var i = 0; i < oli.length; i++) {
            oli[i].index = i;
            oli[i].onmouseover = function() {
                for (var i = 0; i < oli.length; i++) {
                    oli[i].className = '';
                }
                this.className = 'active';
                iNow=this.index;
                iNow2=this.index;
                startMove(ul, { top: -this.index * onePicHeight })
            }
        }
        timer=setInterval(toRun, 2000);
        box.onmouseover=function(){
           clearInterval(timer);
        }
        box.onmouseout=function(){
             timer=setInterval(toRun, 2000);
        }
        function toRun() {
            if(iNow==0){
                uli[0].style.position='static';
                ul.style.top=0;
                iNow2=0;
            }
            if (iNow == uli.length-1) {
                iNow = 0;
                uli[0].style.position='relative';
                uli[0].style.top=uli.length*onePicHeight+'px';
            } else {
                iNow++;
            }
            iNow2++;
            for (var i = 0; i < oli.length; i++) {
                oli[i].className = '';
            }
            oli[iNow].className = 'active';
            startMove(ul, { top: -iNow2 * onePicHeight })
        }
    }
4瘫里、左右自動播放

實現(xiàn)這個主要是布局比較特殊,將未展示圖片定位到他旁邊荡碾,需要展示的時候拉取過來就可以了谨读。正在展示的圖片可以根據(jù)要展示的index大小決定向左定位還是向又定位,以實現(xiàn)從左或者從右拉取的效果坛吁。

image.png
 window.onload = function() {
        var uli = document.getElementsByTagName('ul')[0].getElementsByTagName('li');
        var oli = document.getElementsByTagName('ol')[0].getElementsByTagName('li');
        var ul = document.getElementsByTagName('ul')[0];
        var box=document.getElementById('box');
        var onePicHeight = uli[0].offsetHeight;
        var iNow = 0;
        var iNow2=0;
        for (var i = 0; i < oli.length; i++) {
            oli[i].index = i;
            oli[i].onmouseover = function() {
                for (var i = 0; i < oli.length; i++) {
                    oli[i].className = '';
                }
                this.className = 'active';
                iNow=this.index;
                iNow2=this.index;
                startMove(ul, { top: -this.index * onePicHeight })
            }
        }
        timer=setInterval(toRun, 2000);
        box.onmouseover=function(){
           clearInterval(timer);
        }
        box.onmouseout=function(){
             timer=setInterval(toRun, 2000);
        }
        function toRun() {
            if(iNow==0){
                uli[0].style.position='static';
                ul.style.top=0;
                iNow2=0;
            }
            if (iNow == uli.length-1) {
                iNow = 0;
                uli[0].style.position='relative';
                uli[0].style.top=uli.length*onePicHeight+'px';
            } else {
                iNow++;
            }
            iNow2++;
            for (var i = 0; i < oli.length; i++) {
                oli[i].className = '';
            }
            oli[iNow].className = 'active';
            startMove(ul, { top: -iNow2 * onePicHeight })
        }
    }
5劳殖、手風(fēng)琴式效果
image.png

采用定位方式講=將剩余圖片定位到左邊,有一定間隔拨脉,點擊哪個就讓那張定位到可視窗口即可闷尿。

 window.onload = function() {
        var uli = document.getElementsByTagName('ul')[0].getElementsByTagName('li');
        var ul = document.getElementsByTagName('ul')[0];
        var box = document.getElementById('box');
        var onePicWidth = uli[0].offsetWidth;
        var iNow = 0;
        var btn = true;
        for (var i = 1; i < uli.length; i++) {
            uli[i].style.left = (620 - 60) + (i - 1) * 30 + 'px';
        }
        for (var i = 0; i < uli.length; i++) {
            uli[i].index = i;
            uli[i].onmouseover = function() {
                for (var i = 0; i < uli.length; i++) {
                    if(i<=this.index){
                        startMove(uli[i],{left:i*30});
                    }else{
                        startMove(uli[i],{left:(620 - 60) + (i - 1) * 30 });
                    }
                }
            }

        }
    }

startMove封裝函數(shù)

//封裝運動函數(shù)
// var time=null;
// var alpha=30;
//attr, iTatget  startMove(obj,{attr1:iTarget1,attr2:iTarget2},fn)
function startMove(obj, json, fn) {
    var flag = true; //假設(shè)所有運動都到達了目標(biāo)值
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        //取當(dāng)前值
        for (var attr in json) {
            var incur = 0;
            if (attr == "opacity") {
                incur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
            } else {
                incur = parseInt(getStyle(obj, attr));
            }
            //算速度
            var speed = (json[attr] - incur) / 8;
            speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

            //檢測停止

            if (incur != json[attr]) {
                flag = false;
            }else{
                flag=true;
            }
            if (attr == "opacity") {
                obj.style.filter = 'alpha(opacity:' + (incur + speed) + ')';
                obj.style.opacity = (incur + speed) / 100;
            } else {
                obj.style[attr] = incur + speed + "px";
            }
            if (flag) {
                clearInterval(obj.timer);
                if (fn) {
                    fn();
                }
            }
        }
    }, 30);

}

function getStyle(obj, attr) {
    if (obj.currentStyle) { //ie
        return obj.currentStyle[attr];
    } else {
        return getComputedStyle(obj, false)[attr]; //firefox
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市女坑,隨后出現(xiàn)的幾起案子填具,更是在濱河造成了極大的恐慌,老刑警劉巖匆骗,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳景,死亡現(xiàn)場離奇詭異,居然都是意外死亡碉就,警方通過查閱死者的電腦和手機盟广,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓮钥,“玉大人筋量,你說我怎么就攤上這事〉锵ǎ” “怎么了桨武?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锈津。 經(jīng)常有香客問我呀酸,道長,這世上最難降的妖魔是什么琼梆? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任性誉,我火速辦了婚禮窿吩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘错览。我一直安慰自己纫雁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布倾哺。 她就那樣靜靜地躺著先较,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悼粮。 梳的紋絲不亂的頭發(fā)上闲勺,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音扣猫,去河邊找鬼菜循。 笑死,一個胖子當(dāng)著我的面吹牛申尤,可吹牛的內(nèi)容都是我干的癌幕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼昧穿,長吁一口氣:“原來是場噩夢啊……” “哼勺远!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起时鸵,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胶逢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饰潜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體初坠,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年彭雾,在試婚紗的時候發(fā)現(xiàn)自己被綠了碟刺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡薯酝,死狀恐怖半沽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吴菠,我是刑警寧澤者填,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站橄务,受9級特大地震影響幔托,放射性物質(zhì)發(fā)生泄漏穴亏。R本人自食惡果不足惜蜂挪,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一重挑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棠涮,春花似錦谬哀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驳糯,卻和暖如春篇梭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酝枢。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工恬偷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帘睦。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓袍患,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竣付。 傳聞我的和親對象是個殘疾皇子诡延,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,303評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件古胆、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,121評論 4 61
  • 【秘愛之旅】活動通知 時間:2017.11.10 14:00?17:30 地址:珠海香洲區(qū)上華路2號...
    她說故事閱讀 192評論 0 0
  • 該如何行走—真切明白,放下桶良,開始 畢業(yè)三年座舍,現(xiàn)在才開始走大四那年考試找工作的路,曾經(jīng)看到身邊的同學(xué)忙于實習(xí)陨帆、公考曲秉、...
    我是藝諾閱讀 198評論 0 2
  • 來自 Mattt Thompson 利用代碼塊 Pragma Pragma Mark #pragma mark -...
    維維_iOS閱讀 345評論 0 0