123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- (function(window, undefined) {
- var Carousel = function(ele, obj) {
- console.log(obj)
- this.ele = ele;
- this.cardsList = this.ele.children();
- this.cardsNum = this.cardsList.length;
- this.direction = obj.direction ? obj.direction : 'horizontal';
- this.scale = obj.scale;
- this.transition = obj.transition || '500ms';
- this.transformOrigin = obj.transformOrigin;
- this.opacity = obj.opacity;
- this.offsetDistance = obj.offsetDistance;
- this.switchBtn = obj.switchBtn;
- this.isClickCard = obj.isClickCard || false;
- this.isAuto = obj.isAuto || false;
- this.interval = obj.interval || 5000;
- this.n = obj.n;
- this.mediant = Math.floor(this.cardsNum / 2);
- this.cardsListArr = [].slice.call(this.cardsList);
- this.timer = null;
- this.cssObj = {};
- this.showPicNumber = obj.showPicNumber || null;
- this.certainStyle();
- this.switchEffect();
- this.cardsClick();
- this.switchBtnClick();
- this.autoMove();
- this.switchTimer();
- this.dataList = obj.dataList;
- this.nav = obj.nav;
- };
- Carousel.prototype = {
- constructor: Carousel,
- switchTimer: function() {
- var carousel = this;
- if (this.isAuto) {
- this.cardsList.on('mouseover', function() {
- clearInterval(carousel.timer);
- });
- this.cardsList.on('mouseout', function() {
- carousel.autoMove();
- });
- };
- },
- certainStyle: function() {
- this.cssObj.position = 'absolute';
- if (this.scale) {
- this.scale.length == 1 && this.scale.push(this.scale[0]);
- };
- if (this.direction == 'horizontal') {
- this.cssObj.left = '50%';
- this.availSize = this.ele.outerWidth();
- this.cardSize = this.cardsList.eq(0).outerWidth();
- } else if (this.direction == 'vertical') {
- this.cssObj.top = '50%';
- this.availSize = this.ele.outerHeight();
- this.cardSize = this.cardsList.eq(0).outerHeight();
- // console.log(this.cssObj)
- };
- this.offsetDistance = this.offsetDistance || this.availSize / (this.cardsNum - 1);
- this.transformOrigin && (this.cssObj.transformOrigin = this.transformOrigin);
- this.cssObj.transition = this.transition;
- // console.log(this.cssObj)
- },
- dynamicStyle: function(offsetIndex, offsetIndexAbs, reset, showPicNumber) {
- if (this.direction == 'horizontal') {
- // console.log(this.cssObj)
- // console.log(this.cardSize, this.offsetDistance, offsetIndex, "this.cardSize")
- // console.log(window.innerWidth, "innerWidth")
- let arrLength = this.cardsListArr.length;
- // 根据轮播图的长度和屏幕宽度做相应偏移量调整
- switch (arrLength) {
- case 2:
- {
- if (window.innerWidth < 768 && offsetIndex !== 0) {
- if(offsetIndex > 0){
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance / 2 * offsetIndex + (-offsetIndex) * 170 + 'px';
- }else{
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance / 2 * offsetIndex + (-offsetIndex) * 167 + 'px';
- }
- } else if (window.innerWidth < 1200 && offsetIndex !== 0) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance / 2 * offsetIndex + (-offsetIndex) * 60 + 'px';
- } else if (window.innerWidth >= 1200 && offsetIndex !== 0) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance / 2 * offsetIndex + (-offsetIndex) * 10 + 'px';
- } else {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + 'px';
- }
- };
- break;
- case 3:
- case 4:
- {
- if (window.innerWidth < 768 && offsetIndex !== 0) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance / 2 * offsetIndex + (-offsetIndex) * 15 + 'px';
- } else if (window.innerWidth < 1200 && offsetIndex !== 0) {
- if (offsetIndex == -1) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + 52 + 'px';
- } else {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex - 60 + 'px';
- }
- } else if (window.innerWidth >= 1200 && offsetIndex !== 0) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + (-offsetIndex) * 10 + 'px';
- } else {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + 'px';
- }
- };
- break;
- default:
- {
- if (window.innerWidth < 768) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + (-offsetIndex) * 4 + 'px';
- } else if(window.innerWidth < 1200) {
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + 'px';
- }else{
- this.cssObj.marginLeft = -this.cardSize / 2 + this.offsetDistance * offsetIndex + (offsetIndex) * 30 + 'px';
- }
- };
- break;
- }
- } else if (this.direction == 'vertical') {
- this.cssObj.marginTop = -this.cardSize / 2 + this.offsetDistance * offsetIndex + 'px';
- };
- this.cssObj.zIndex = reset;
- // this.opacity && (this.cssObj.opacity = Math.pow(this.opacity, offsetIndexAbs));
- // 根据要展示的图片数,来给定透明度,showPicNumber为1时展示主图,为3时展示3张图,不传时则默认所有都展示,其它则不展示
- if (this.opacity) {
- switch (showPicNumber) {
- case 1:
- {
- if (Math.pow(this.opacity, offsetIndexAbs) === 1) {
- this.cssObj.opacity = 1;
- } else {
- this.cssObj.opacity = 0;
- }
- };
- break;
- case 3:
- {
- if (Math.pow(this.opacity, offsetIndexAbs) >= 0.9) {
- this.cssObj.opacity = Math.pow(this.opacity, offsetIndexAbs)
- } else {
- this.cssObj.opacity = 0
- }
- };
- break;
- default:
- this.cssObj.opacity = Math.pow(this.opacity, offsetIndexAbs);
- break;
- }
- }
- this.scale && (this.cssObj.transform = 'scale(' + Math.pow(this.scale[0], offsetIndexAbs) + ',' + Math.pow(this.scale[1], offsetIndexAbs) + ')');
- this.cssObj.background = "rgba(0,0,0,1);"
- var show = "box-shadow"
- this.cssObj.show = '0px 8px 13px 0px rgba(23,28,46,0.88)'
- console.log(this.scale[1])
- // if(this.opacity == 0.9){
- // this.cssObj.background = 'red';
- // }
- // this.cssObj.background = 'red';
- },
- switchEffect: function() {
- var carousel = this;
- const showPicNumber = carousel.showPicNumber;
- var offsetNum = Math.abs(carousel.n - carousel.mediant);
- console.log('arousel.n>>>', carousel.n)
- console.log("carousel.mediant>>>", carousel.mediant)
- if (carousel.n == carousel.mediant && carousel.nav == 1) {
- return;
- } else if (carousel.n > carousel.mediant) {
- // alert("提示信息2")
- carousel.cardsListArr = carousel.cardsListArr.concat(carousel.cardsListArr.splice(0, offsetNum));
- } else {
- // alert("提示信息3")
- carousel.cardsListArr = carousel.cardsListArr.splice(carousel.cardsNum - offsetNum).concat(carousel.cardsListArr);
- };
- $(carousel.cardsListArr).each(function(i, e) {
- var offsetIndex = i - carousel.mediant,
- offsetIndexAbs = Math.abs(offsetIndex),
- reset = carousel.mediant - offsetIndexAbs;
- carousel.dynamicStyle(offsetIndex, offsetIndexAbs, reset, showPicNumber);
- // console.log(carousel.cssObj)
- $(e).css(carousel.cssObj);
- $(e).attr('n', i);
- });
- },
- cardsClick: function() {
- console.log(">>>>>>>>>s", this.isClickCard)
- if (this.isClickCard) {
- var carousel = this;
- $(carousel.cardsListArr).on('click', function() {});
- // $('.nav-gse').on('click',function(){
- // $(this).addClass('nav-gse-ave')
- // $(this).siblings().removeClass('nav-gse-ave')
- //// css({"background":"red"})
- // $(this).find('.nav-bg').find('.nav-mnai').removeClass('nav-mnai')
- // $(this).siblings().find('.nav-bg').find('.nav-buseqw').addClass('nav-mnai')
- // carousel.switchEffect();
- // })
- };
- },
- prev: function() {
- var carousel = this;
- carousel.n = carousel.mediant - 1;
- carousel.n < 0 && (carousel.n = carousel.cardsNum - 1);
- carousel.switchEffect();
- // $("#containerse li").each(function(i, e) {
- // if($(e).css("opacity") == 1){
- // indexs = i
- // }
- // });
- //
- // console.log("dataList>>>",carousel.dataList)
- },
- next: function() {
- var carousel = this;
- carousel.n = carousel.mediant + 1;
- carousel.n > carousel.cardsNum - 1 && (carousel.n = 0);
- carousel.switchEffect();
- },
- switchBtnClick: function() {
- var carousel = this;
- if (carousel.switchBtn) {
- carousel.switchBtn.eq(0).on('click', function() {
- carousel.prev();
- if (carousel.isAuto) {
- clearInterval(carousel.timer);
- carousel.cardsList.eq(carousel.n).one('transitionend', function() {
- carousel.autoMove();
- });
- };
- });
- carousel.switchBtn.eq(1).on('click', function() {
- carousel.next();
- if (carousel.isAuto) {
- clearInterval(carousel.timer);
- carousel.cardsList.eq(carousel.n).one('transitionend', function() {
- carousel.autoMove();
- });
- };
- });
- };
- },
- autoMove: function() {
- var carousel = this;
- if (carousel.isAuto) {
- clearInterval(carousel.timer);
- carousel.timer = setInterval(function() {
- carousel.next();
- }, carousel.interval);
- };
- },
- };
- window.Carousel = Carousel;
- }(window));
|