基于jq的3D輪播圖插件

效果圖

記一個簡單js插件封裝炊汤,怕忘了??
封裝還是先需要了解一下js原型prototype

1. 文件主體完全是通用套裝,對其他框架的解釋方式處理(其實沒用過AMD存炮,后面加強學(xué)習(xí)??)
(function (root, factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define([], factory);
    } else if (typeof exports === 'object') {
        // COMMONJS
        module.exports = factory();
    } else {
        // BROWSER
        root.YScroll = factory();
    }
}(this, function () {···
}));
2. 參數(shù)的一些默認(rèn)值, 擴展方法隶校,插件的承載對象 YScroll 和它的私有參數(shù)(我這里分得不是很清晰)
    var defaults = {
        wrapper: '#YScroll',
        autoPlay: false,
        interTime: 2500,
        prevCell: ".prev",
        nextCell: ".next",
        arrow: ".arrow",
        sizeDatas: [],
        centerX: 0,
        centerY: 0,
        a: 0, //半徑:寬
        b: 0, //半徑:高
        style: 1, //展示的樣式 1:默認(rèn)  2:兩側(cè)對稱
    };
    var extend = function () {···
    };
    // 插件的承載對象
    var YScroll = function () {
        this.wrapper = '';
        this.CardNumber = 0; //生成點的個數(shù), 根據(jù)外部的li個數(shù)來確定
        this.arc = 360;     //弧度: 默認(rèn)360
        this.cardWidth = this.cardHeight = 0, //卡片寬高
        this.sizeDatas = [];
    };
3. 插件主題函數(shù)
 YScroll.prototype = {
        conBox: null,
        nextBtn: null,
        prevBtn: null,
        arrowD: null,
        timer: null,
        init: function (options) {···
        }, 
        animate: function () {···
        },
        nextCad: function () {···
        },
        prevCad: function () {···
        },
        doPlay: function () {/*自動播放*/···
        },
        applyEllipse: function () {···
        },
        attachEvent: function () {···
        }
    }

函數(shù)很簡明,這里主要總結(jié)一下:

  • 標(biāo)簽和jq對象組合成新的對象:
    var wapperJQ = $(this.wrapper); self.conBox = $("ul li", wapperJQ);
  • 插件基于jq是為了使用它的animation(真香忍坷。粘舟。)
    動畫使用jq的self.conBox.eq(i).stop().animate(data, 500);
  • 動畫參數(shù)的改變:對預(yù)設(shè)形變參數(shù)數(shù)組進行循環(huán)
        nextCad: function () {
            var first = YScroll.sizeDatas.shift();
            YScroll.sizeDatas.push(first);
            YScroll.animate();
        },
        prevCad: function () {
            var last = this.sizeDatas.pop();
            this.sizeDatas.unshift(last);
            this.animate();
        },

4. 這里著重提一下3D循環(huán)滾動各種參數(shù)的生成算法

- 橢圓的繪制使用的三角函數(shù),記不住三角函數(shù)的同學(xué)可以參考一下公式??:
三角函數(shù)
  • 錨點(x,y):卡片的中心點佩研,根據(jù)預(yù)設(shè)的長短半徑生成對應(yīng)的橢圓(當(dāng)然也可以是圓形),這個可以參照三角函數(shù)
var hudu = (Math.PI / 180) * (i * pnC),
x1 = this.settings.centerX - this.settings.a * Math.sin(hudu),
y1 = this.settings.centerY + (this.settings.b * Math.cos(hudu)),
  • z-index:始終保持頂點卡片在最前面蓖乘,elopacity,始終保持頂點卡片不透明
zIndex = factor ? this.CardNumber - i : i,
elopacity = 1 - 0.02 * xCode, //透明度
  • 卡片的尺寸縮放系數(shù)scaleX(這個有很大調(diào)整空間)韧骗,根據(jù)設(shè)置的style(目前只有兩種)生成不同風(fēng)格的排列風(fēng)格嘉抒。
  • 卡片的top,left也受到scaleX的影響

                switch (this.settings.style) {
                    case 1: //尺寸系數(shù) --1   默認(rèn)
                        {
                            scaleX = 1 - xCode * (factor ? cose1 *= 0.9 : cose1 /= 0.92);
                        }
                        break;
                    case 2://尺寸系數(shù) --2 -左右對稱   i太大 (圓弧描點 )會導(dǎo)致尺寸過小
                        {
                            scaleX = 1 - xCode * 0.12;
                            .2>scaleX && (scaleX = lastScale);
                            lastScale = scaleX;//防止尺寸太小
                        }
                }

over~

附上github地址3D-Yscroll
總的來說代碼不存在難度袍暴,將就著用了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末些侍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子政模,更是在濱河造成了極大的恐慌岗宣,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淋样,死亡現(xiàn)場離奇詭異耗式,居然都是意外死亡,警方通過查閱死者的電腦和手機趁猴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門刊咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儡司,你說我怎么就攤上這事娱挨。” “怎么了捕犬?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵跷坝,是天一觀的道長酵镜。 經(jīng)常有香客問我,道長柴钻,這世上最難降的妖魔是什么淮韭? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮贴届,結(jié)果婚禮上靠粪,老公的妹妹穿的比我還像新娘。我一直安慰自己粱腻,他們只是感情好庇配,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍些,像睡著了一般捞慌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柬批,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天啸澡,我揣著相機與錄音,去河邊找鬼氮帐。 笑死嗅虏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的上沐。 我是一名探鬼主播皮服,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼参咙!你這毒婦竟也來了龄广?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蕴侧,失蹤者是張志新(化名)和其女友劉穎择同,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體净宵,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡敲才,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了择葡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紧武。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刁岸,靈堂內(nèi)的尸體忽然破棺而出脏里,到底是詐尸還是另有隱情,我是刑警寧澤虹曙,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布迫横,位于F島的核電站,受9級特大地震影響酝碳,放射性物質(zhì)發(fā)生泄漏矾踱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一疏哗、第九天 我趴在偏房一處隱蔽的房頂上張望呛讲。 院中可真熱鬧,春花似錦返奉、人聲如沸贝搁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雷逆。三九已至,卻和暖如春污尉,著一層夾襖步出監(jiān)牢的瞬間膀哲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工被碗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留某宪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓锐朴,卻偏偏與公主長得像兴喂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子焚志,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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