博主在浏览网页时无意间发现了一种banner图的轮播方式——像旋转木马一样的轮播方式,博主感觉非常新颖独特,经过查阅资料,观看某课网教程总算搞了出来的,其原理主要利用了JQuery代码实现,好了不多说,看楼下代码及演示效果吧

首先是HTML及CSS代码

HTML

<div class="pictureSlider poster-main" data-setting='{"width":1000,"height":270,"posterWidth":640,"posterHeight":270,"scale":0.8,"autoPlay":true,"delay":2000,"speed":300}'>
<div class="poster-btn poster-prev-btn"></div>
<ul class="poster-list">
<li class="poster-item"><a href="http://www.16sucai.com"><img src="data:images/01.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/02.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/03.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/04.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/05.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/06.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/07.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/08.jpg" width="100%" height="100%"></a></li>
<li class="poster-item"><a href="#"><img src="data:images/09.jpg" width="100%" height="100%"></a></li>
</ul>
<div class="poster-btn poster-next-btn"></div>
</div>

CSS代码

*{margin:;padding:;list-style: none;border:;}
.container { margin:150px auto; max-width:1000px;}
.poster-main{ position:relative;width:800px;height:270px;}
.poster-main a,.poster-main img{display:block;}
.poster-main .poster-list{width:800px;height:270px;}
.poster-main .poster-list .poster-item{ position:absolute;left:;top:;}
.poster-main .poster-btn{ position:absolute;top:;width:100px;height:270px; z-index:; cursor:pointer; opacity:0.8}
.poster-main .poster-prev-btn{left:; background: url(../images/btn_l.png) no-repeat center center;}
.poster-main .poster-next-btn{right:; background: url(../images/btn_r.png) no-repeat center center;}

然后是JS代码

;(function($){

    var Carousel = function(poster){
var self = this;
//保存单个旋转木马对象
this.poster = poster;
this.posterItemMain = poster.find("ul.poster-list");
this.nextBtn = poster.find("div.poster-next-btn");
this.prevBtn = poster.find("div.poster-prev-btn");
this.posterItems = poster.find("li.poster-item");
if( this.posterItems.size()%2 == 0 ){
this.posterItemMain.append( this.posterItems.eq(0).clone() );
this.posterItems = this.posterItemMain.children();
};
this.posterFirstItem = this.posterItems.first();
this.posterLastItem = this.posterItems.last();
this.rotateFlag = true;
//默认配置参数
this.setting = {
"width" : 1000, //幻灯片的宽度
"height" : 270, //幻灯片的高度
"posterWidth" : 640, //幻灯片第一帧的宽度
"posterHeight" : 270, //幻灯片第一帧的高度
"scale" : 0.9, //记录显示比例关系
"speed" : 500,
"autoPlay" : false,
"delay" : 5000,
"verticalAlign" : "middle" //top bottom
};
$.extend( this.setting,this.getSetting() ); //设置配置参数值
this.setSettingValue();
//初始化幻灯片位置
this.setPosterPos();
//左旋转按钮
this.nextBtn.click(function(){
if(self.rotateFlag){
self.rotateFlag = false;
self.carouseRotate("left");
};
});
//右旋转按钮
this.prevBtn.click(function(){
if(self.rotateFlag){
self.rotateFlag = false;
self.carouseRotate("right");
};
});
//是否开启自动播放
if(this.setting.autoPlay){
this.autoPlay();
this.poster.hover( function(){
//self.timer是setInterval的种子
window.clearInterval(self.timer);
}, function(){
self.autoPlay();
});
};
};
Carousel.prototype = {
autoPlay:function(){
var self = this;
this.timer = window.setInterval( function(){
self.nextBtn.click();
}, this.setting.delay );
}, //旋转
carouseRotate:function(dir){
var _this_ = this;
var zIndexArr = [];
//左旋转
if(dir === "left"){
this.posterItems.each(function(){
var self = $(this),
prev = self.prev().get(0)?self.prev():_this_.posterLastItem,
width = prev.width(),
height =prev.height(),
opacity = prev.css("opacity"),
left = prev.css("left"),
top = prev.css("top"),
zIndex = prev.css("zIndex"); zIndexArr.push(zIndex);
self.animate({
width :width,
height :height,
//zIndex :zIndex,
opacity :opacity,
left :left,
top :top
},_this_.setting.speed,function(){
_this_.rotateFlag = true;
});
});
//zIndex需要单独保存再设置,防止循环时候设置再取的时候值永远是最后一个的zindex
this.posterItems.each(function(i){
$(this).css("zIndex",zIndexArr[i]);
});
}else if(dir === "right"){//右旋转
this.posterItems .each(function(){
var self = $(this),
next = self.next().get(0)?self.next():_this_.posterFirstItem,
width = next.width(),
height =next.height(),
opacity = next.css("opacity"),
left = next.css("left"),
top = next.css("top"),
zIndex = next.css("zIndex"); zIndexArr.push(zIndex);
self.animate({
width :width,
height :height,
//zIndex :zIndex,
opacity :opacity,
left :left,
top :top
},_this_.setting.speed,function(){
_this_.rotateFlag = true;
});
});
//zIndex需要单独保存再设置,防止循环时候设置再取的时候值永远是最后一个的zindex
this.posterItems.each(function(i){
$(this).css("zIndex",zIndexArr[i]);
});
};
},
//设置剩余的帧的位置关系
setPosterPos:function(){
var self = this,
sliceItems = this.posterItems.slice(1),
sliceSize = sliceItems.size()/2,
rightSlice = sliceItems.slice(0,sliceSize),
//存在图片奇偶数问题
level = Math.floor(this.posterItems.size()/2),
leftSlice = sliceItems.slice(sliceSize); //设置右边帧的位置关系和宽度高度top
var firstLeft = (this.setting.width - this.setting.posterWidth)/2;
var rw = this.setting.posterWidth,
fixOffsetLeft = firstLeft + rw,
rh = this.setting.posterHeight,
gap = ((this.setting.width - this.setting.posterWidth)/2)/level; //设置右边位置关系
rightSlice.each(function(i){
level--;
rw = rw * self.setting.scale;
rh = rh * self.setting.scale;
var j = i;
$(this).css({
zIndex :level,
width :rw,
height :rh,
opacity :1/(++j),
left :fixOffsetLeft+(++i)*gap - rw,
top :self.setVerticalAlign(rh)
});
}); //设置左边的位置关系
var lw = rightSlice.last().width(),
lh =rightSlice.last().height(),
oloop = Math.floor(this.posterItems.size()/2);
leftSlice.each(function(i){
$(this).css({
zIndex:i,
width:lw,
height:lh,
opacity:1/oloop,
left:i*gap,
top:self.setVerticalAlign(lh)
});
lw = lw/self.setting.scale;
lh = lh/self.setting.scale;
oloop--;
});
}, //设置垂直排列对齐
setVerticalAlign:function(height){
var verticalType = this.setting.verticalAlign,
top = 0;
if(verticalType === "middle"){
top = (this.setting.height-height)/2;
}else if(verticalType === "top"){
top = 0;
}else if(verticalType === "bottom"){
top = this.setting.height-height;
}else{
top = (this.setting.height-height)/2;
};
return top;
}, //设置配置参数值去控制基本的宽度高度
setSettingValue:function(){
this.poster.css({
width:this.setting.width,
height:this.setting.height
});
this.posterItemMain.css({
width:this.setting.width,
height:this.setting.height
});
//计算上下切换按钮的宽度
var w = (this.setting.width-this.setting.posterWidth)/2;
//设置切换按钮的宽高,层级关系
this.nextBtn.css({
width:w,
height:this.setting.height,
zIndex:Math.ceil(this.posterItems.size()/2)
});
this.prevBtn.css({
width:w,
height:this.setting.height,
zIndex:Math.ceil(this.posterItems.size()/2)
});
this.posterFirstItem.css({
width:this.setting.posterWidth,
height:this.setting.posterHeight,
left:w,
top:0,
zIndex:Math.floor(this.posterItems.size()/2)
});
}, //获取人工配置参数
getSetting:function(){
var setting = this.poster.attr("data-setting");
if(setting && setting != ""){
return $.parseJSON(setting);
}else{
return {};
};
}
}; Carousel.init = function(posters){
var _this_ = this;
posters.each(function(){
// console.log("halo Louis;")
new _this_($(this));
});
}; //挂载到window下
window.Carousel = Carousel; })(jQuery);

运行可知其效果如下

JQuery——banner旋转木马效果的更多相关文章

  1. Android UI - 实现广告Banner旋转木马效果

    Android UI - 实现广告Banner旋转木马效果 前言 本篇博客要分享的一个效果是实现广告Banner轮播效果,这个效果也比較常见,一些视频类应用就常常有,就拿360影视大全来举例吧: 用红 ...

  2. 【前端】javascript+jQuery实现旋转木马效果轮播图slider

    实现效果: 实现原理: 技术栈: javascript+jQuery+html+css 实现步骤: // 0. 获取元素 // 1. 鼠标放置到轮播图上,显示两侧的控制按钮,移开后隐藏 // 2. 为 ...

  3. 用jQuery实现旋转木马效果(带前后按钮和索引按钮)

    项目中要用到旋转木马效果,一共5张图片轮播,并且点击对应的索引按钮能切换到对应的图片.本效果实在jquery.carousel.js插件的基础上做了一些改进,以实现上述需求. 效果图如下: 代码: H ...

  4. jQuery仿3D旋转木马效果插件(带索引按钮)

    项目中需要用到旋转木马效果,但是我在网上找的插件,基本都是不带按钮或者只是带前后按钮的,而项目要求的是带索引按钮,也就是说有3张图片轮播,对应的要有3个小按钮,点击按钮,对应的图片位于中间位置.于是就 ...

  5. 利用CSS3D效果制作简易旋转木马效果

    最近看一下css3d的一些特性,想着也实验学习一下,制作个小demo之类的.就练习了一下.开发一个粗糙的选择木马效果,如图 其实就是找到角度和位置,计算每根柱子的旋转角度摆放到3d空间的置顶位置即可. ...

  6. jQuery实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  7. jquery左右滑动效果的实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 仿jQuery的siblings效果的js原生代码

    仿jQuery的siblings效果的js原生代码 <previousSibling> 属性返回选定节点的上一个同级节点(在相同树层级中的前一个节点). <nextSibling&g ...

  9. JQuery实现广告效果(滚动切换)

    JQuery实现广告效果(滚动切换)   Html+css 效果如上图 代码: <!DOCTYPE html> <html> <head lang="en&qu ...

随机推荐

  1. 【踩坑】360安全浏览器“极速模式”和“兼容模式”,套路还是bug?

    分享踩坑点: 项目中需要兼容360安全浏览器,大家当然都希望用极速模式打开网站,但是发现总是被兼容模式打开 网址类似 aa.xx.dd.com 网上找了很多地方,有以下两种方法 1.<meta ...

  2. 1.Java 加解密技术系列之 BASE64

    Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...

  3. React介绍(讲人话)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px "PingFang SC"; color: #616161 } span. ...

  4. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

  5. Java虚拟机原理

    1.编译机制 分析和输入到符号表: 词法分析:将代码转化为token序列 语法分析:由token序列生成抽象语法树 输入到符号表:将类中出现的符号输入到类的符号表 注解处理: 处理用户自定义注解,之后 ...

  6. Graphical Analysis of German Parliament Voting Pattern

    We use network visualizations to look into the voting patterns in the current German parliament. I d ...

  7. How-to go parallel in R – basics + tips(转)

    Today is a good day to start parallelizing your code. I’ve been using the parallel package since its ...

  8. Bash+R: howto pass parameters from bash script to R(转)

    From original post @ http://analyticsblog.mecglobal.it/analytics-tools/bashr/ In the world of data a ...

  9. hdu_A Walk Through the Forest ——迪杰特斯拉+dfs

    A Walk Through the Forest Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/ ...

  10. C. Friends

    C. Friends 题意 对于任一点,求到此点距离不超过6的节点数. 分析 第一次dfs,形成一个以 1 为根的有向树,设 down[i][j] 为以i为根节点,距离 i 点距离不超过 j 的节点数 ...