个人学习JQ插件编写成果:little酷炫的图片滑动切换效果
工作一个多月了,好久没来冒冒泡了,看了@wayong的JQ插件教程,自己编写了一个模仿拉勾网首页广告栏滑动特效的JQ插件,现在跟朋友们分享分享!
先上demo链接:http://runjs.cn/detail/gpowdhhk
快要下班了~先把代码放出来~~回家再编辑~
这里是HTML代码:
<!--js酷炫图片滑动hover效果,类似拉勾网-->
<div class="beauty-go-outer" id="my-div">
<ul class="beauty-list">
<li class="beauty-item item1"><a href="#" target="_blank">
<div class="front">
<span class="left"></span>
<span class="right"></span>
</div>
<div class="back">
<span class="left"></span>
<span class="right"></span>
</div>
</a></li>
1 ......//相同结构,想要多少加多少
</ul>
</div>
<!-- 酷炫图片滑动效果结束 -->
这里是CSS代码:
//可以根据个人需要调整各块内容的大小,完全由你做主!
1 *{
margin:;
padding:;
}
ul,li{
list-style-type: none;
}
.beauty-go-outer{
width: 840px;
height: 1000px;
background-color: #a3a3a3;
overflow: hidden;
margin: auto;
}
.beauty-item{
float: left;
position: relative;
width: 400px;
height: 200px;
margin-right: 10px;
margin-bottom: 10px;
overflow: hidden;
}
.beauty-item .front,.beauty-item .back{
width: 400px;
height: 200px;
position: absolute;
left:;
top:;
}
.beauty-item .back{
display: none;
} .beauty-item .left,.beauty-item .right{
display: block;
float: left;
width: 200px;
height: 200px;
}
.beauty-item .front .left{
background-color: cornflowerblue;
}
.beauty-item .front .right{
background-color: forestgreen;
}
.beauty-item .back .left{
background-color: darkblue;
}
.beauty-item .back .right{
background-color: deeppink;
} /*图片导入*/
.item1 .front .left{
background: url("images/slideImgShow/1.jpg") no-repeat 0 0;
}
.item1 .front .right{
background: url("images/slideImgShow/5.jpg") no-repeat 0 0;
}
.item1 .back .left{
background: url("images/slideImgShow/5.jpg") no-repeat 0 0;
}
.item1 .back .right{
background: url("images/slideImgShow/1.jpg") no-repeat 0 0;
}
.............//这里根据内容块的多少,添加内容块的背景图片,重复的事~~~~(>_<)~~~~
这里是js代码:
/*
* 酷炫图片滑动展示效果插件
* 尊重他人劳动成果,转载请自觉注明出处!注:此代码仅供学习交流,请勿用于商业用途。O(∩_∩)O哈哈~
* */
//依赖方法1: 获取元素的坐标
$.get_pos = function(elem){
if(!elem) return false;
var left = elem.offsetLeft,
top = elem.offsetTop,
current = elem.offsetParent;
while(current !== null){
left += current.offsetLeft;
top += current.offsetTop;
current = current.offsetParent;
}
return {"left": left, "top": top};
};
//依赖方法2:判断鼠标进入/移出元素的方向
$.get_dir = function(elem, mouse_pos){
if(!elem) return false;
var pos = $.get_pos(elem),
size = {"width": elem.offsetWidth, "height": elem.offsetHeight},
dx = mouse_pos.x - pos.left - size.width/2,
dy = (mouse_pos.y - pos.top - size.height/2)*-1,
eve_tan = dy/dx,
tan = size.height/size.width;
if(dx != 0){
if(eve_tan > tan*-1 && eve_tan < tan && dx < 0){
return "left";
}else if(eve_tan > tan*-1 && eve_tan < tan && dx > 0){
return "right";
}else if((eve_tan > tan || eve_tan < tan*-1) && dy > 0){
return "top";
}else if((eve_tan > tan || eve_tan < tan*-1) && dy <= 0){
return "bottom";
}
}else if(dy > 0){
return "top";
}else {
return "bottom";
}
}; //特效主函数
;(function($,window,document,undefined){ //这里的 ; 是为了保证不与前面的函数发生冲突,没有分号,
// 定义beautifier构造函数,创建类 //如果前面的代码缺少分号,则会被认为这些代码和前面是一起的,从而出错
var ContainerObj = function(ele){
this.wrapper = ele;
this.box = ele.find('.beauty-item');
};
//在Beautifier原型上添加修改CSS属性的方法
ContainerObj.prototype = {
addSlideEvent : function(){
var mouse_pos, x, y;
for(var i = 0,max = this.box.length;i < max;i++){
this.box.eq(i).on('mouseenter',function(e){
e.stopPropagation();
x = e.pageX;
y = e.pageY;
mouse_pos = {'x': x, 'y': y};
var dir = $.get_dir(this,mouse_pos);
switch (dir){
case 'left':
$(this).find('.back').eq(0).css({
left : '-100%',
top : '0',
display : 'block'
}).stop().animate({
left : '0',
top : '0'
},300,false);
break;
case 'right':
$(this).find('.back').eq(0).css({
left : '100%',
top : '0',
display : 'block'
}).stop().animate({
left : '0',
top : '0'
},300,false);
break;
case 'top':
$(this).find('.back').eq(0).css({
left : '0',
top : '-100%',
display : 'block'
}).stop().animate({
left : '0',
top : '0'
},300,false);
break;
case 'bottom':
$(this).find('.back').eq(0).css({
left : '0',
top : '100%',
display : 'block'
}).stop().animate({
left : '0',
top : '0'
},300,false);
break;
default: break;
}
});
this.box.eq(i).on('mouseleave',function(e){
e.stopPropagation();
x = e.pageX;
y = e.pageY;
mouse_pos = {'x': x, 'y': y};
var dir = $.get_dir(this,mouse_pos);
switch (dir){
case 'left':
$(this).find('.back').eq(0).stop().animate({
left : '-100%',
top : '0'
},300,false);
break;
case 'right':
$(this).find('.back').eq(0).stop().animate({
left : '100%',
top : '0'
},300,false);
break;
case 'top':
$(this).find('.back').eq(0).stop().animate({
left : '0',
top : '-100%'
},300,false);
break;
case 'bottom':
$(this).find('.back').eq(0).stop().animate({
left : '0',
top : '100%'
},300,false);
break;
default: break;
}
}); }
return this.wrapper;
}
}; $.fn.slideImgShow = function(){
var containerObj = new ContainerObj(this);
return containerObj.addSlideEvent();
} })(jQuery,window,document); //调用就是这么简单~跟一个JQ的API一样一样的噢~链式操作也是没有断的,还可以进行其他操作!
$("#my-div").slideImgShow();
代码发完了~~~感觉自己又小小的爬升了一个台阶,加油,每天积累一点点,1年后就积累365个点点!
谢谢@wayong 的JQ插件教程,受益匪浅!
个人学习JQ插件编写成果:little酷炫的图片滑动切换效果的更多相关文章
- 一分钟搞定触手app主页酷炫滑动切换效果
代码地址如下:http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想这 ...
- jQuery插件实例三:图片滚动[切换]效果一
图片切换效果在很多网站上都能看到,是一种常见的广告/活动宣传方式,通常位于网页上端.这个插件是众多图片切换效果的形式中的一种,数据源可在前端配置,也可从后台通JSON格式传输数据,当然,数据格式是固定 ...
- css3实现酷炫的3D盒子翻转效果
简介 运用css3先在平面空间组成立方体盒子,再让整个盒子翻转起来,先来张效果图: 步骤 1.先用css将6张图片摆成下图的样子: 下面就是通过css3的3D变换将每个面进行翻转,使之成为一个立体的盒 ...
- 用仿ActionScript的语法来编写html5——第八篇,图片处理+粒子效果
用仿ActionScript的语法来编写html5系列开发到现在,应该可以做出一些东西了,下面先来研究下图片的各种效果预览各种效果看下图效果和代码看这里,看不到效果的请下载支持html5的浏览器 ht ...
- JQ 实现轮播图(3D旋转图片轮播效果)
轮播图效果如下: 代码: <!DOCTYPE html> <html xmlns="/www.w3.org/1999/xhtml"> <head> ...
- jQ插件编写
参考文档:http://www.cnblogs.com/Dlonghow/p/4142034.html 编写插件最先接触到的就是jQuery.fn.extend 和jQuery.extend 这个两个 ...
- 一款实现滑动切换效果的插件---swiper
Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端. Swiper能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果. Swiper开源.免费.稳定.使用简单. ...
- Flexslider插件实现图片轮播、文字图片相结合滑动切换效果
插件下载: 点击下载 密码: fbeg Flexslider具有以下特性: 支持滑动和淡入淡出效果. 支持水平.垂直方向滑动. 支持键盘方向键控制. 支持触控滑动. 支持图文混排,支持各种html元素 ...
- jquery.roundabout.js图片叠加3D旋转插件多功能图片翻转切换效果
http://www.17sucai.com/pins/4880.html DEMO演示地址:http://www.17sucai.com/pins/demoshow/4880
随机推荐
- R语言做文本挖掘 Part4文本分类
Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现 ...
- Design Pattern Command 命令设计模式
这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作. 有可能进一步利用map您最喜欢的对接命令字. 正在运行的类实际上已经包含了操作的所有需求,例如: class SuperMak ...
- GDI+学习笔记(六)渐变画笔
刷,顾名思义,它是一样的刷.提请设备,还记得常唱歌曲,"我是一个画家.." 好吧.跑题了. 本系列博客希望尽可能简单的描写叙述每项功能,而不希望把每一个參数都介绍的详具体细,假设须 ...
- Event Sourcing - ENode(一)
分布式系统 摩尔定律如果一直能实现,不管是涉及或者实现一个OLTP的系统,我们是不是都会轻松点,用硬件堆就可以了.但是现在硬件已经在求变了,那么我们也得求变,云的概念如此之火,本质就是设施虚拟化,也可 ...
- Async和Await进行异步编程
使用Async和Await进行异步编程(C#版 适用于VS2015) 你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很 ...
- Android深入研究Adapter重绘
一直以来Adapter的使用都仅仅是流于表面,仅仅知道要实现几个抽象的方法,把Adapter设置给某种listView,就能够非常好的工作起来.所谓理解仅仅是建立在主观的猜想上面,认为应该是这样,对, ...
- Angular绑定数据时转义html标签
AngularJs在绑定数据时默认会以文本的形式出现在页面上,比如我现在有这样一段代码 <div ng-controller="testCtrl">{{data}}&l ...
- GridView网格线都设置
如今,做网上商店的商品陈列,我想用网络格布局,但总认为空好看.所以我想给它一个净加格线.但是,我遇到了一个问题,网络格布局其实很easy,是集GridView布局和背景颜色adapter布局设置背景颜 ...
- android studio 在线更新android sdk,遇到无法Fetching https://dl-ssl.google.com/...的解决方式
近期实在受不了eclipse的"迟钝",准备入手Android studio开发环境,可是貌似不太顺利,安装成功了Android studio,在线更新Android adk的时候 ...
- CSS小记(持续更新......)
1 内联元素和块级元素的区别以及display的三种属性区别 在说起display属性之前,就必须先说说什么是文档流,以及文档流中的内敛元素和块级元素又是指什么? 一直觉得理解了文档流的概念,一堆CS ...