博主在浏览网页时无意间发现了一种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. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  2. Android 真机无线调试

    有很多人在学Android的时候最开始接触的都是模拟机的测试,如果像好的模拟机比如genimotion,次一点的蓝手指,测试都还比较可以.有的也不缺乏是用真机测试.本人开始用华为真机测试,也是一直连线 ...

  3. 在web项目启动时,使用监听器来执行某个方法

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 这里写了个简 ...

  4. 浏览器兼容性--new Date

    ie浏览器下new Date("2013/04")与new Date("2016-04")会报错: //将201601格式的字符串转为Date对象,月份从0开始 ...

  5. 回归-LDA与QDA

    作者:桂. 时间:2017-05-23  06:37:31 链接:http://www.cnblogs.com/xingshansi/p/6892317.html 前言 仍然是python库函数sci ...

  6. javaWeb学习总结(8)- JSP原理

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  7. React+ajax+java 上传图片并预览

    之前有在网上找ajax上传图片的资料,大部分的人写得都是用jQuery,但是在这里用JQuery就大才小用了,所以我就自己写了,先上图. 由上图,首先点击上面的选择文件,在选择图片之后,将会自动上传图 ...

  8. Chart.js – 效果精美的 HTML5 Canvas 图表库

    Chart.js 是一个令人印象深刻的 JavaScript 图表库,建立在 HTML5 Canvas 基础上.目前,它支持6种图表类型(折线图,条形图,雷达图,饼图,柱状图和极地区域区).而且,这是 ...

  9. linux中搭建java开发环境

    JDK安装 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载对应jdk版本, ...

  10. cas4.2以下取消https

    deployerConfigContext.xml增加参数p:requireSecure="false" <bean class="org.jasig.cas.au ...