20150721 全屏切换效果(含核心代码)
来源:互联网 发布:战地1淘宝美版25块钱 编辑:程序博客网 时间:2024/06/07 18:07
通过css使div全屏、实现jquery简单组件开发、重写鼠标滚动事件、切屏动画
1、全屏(css/DOM结构)
竖:height:100%
横:外width:400%内25% float:left
滚动条消失:overflow:hidden
html, body {height: 100%;overflow: hidden;}#container, .section {height: 100%;position: relative;}.left {float: left;}#container {width: 400%;}.section {width: 25%;}
2、组件开发
类级别组件开发 添加foo的全局函数(静态方法) jQuery.foo=function(){}eg:$.Ajax() $.extend()对象级别组件开发 挂在原型下的方法(动态方法)需创建实例来调用
$.fn.foo=function(){}eg:addClass、attr()
(function($) {var defaults = {'container' : '#container',// 容器'sections' : '.section',// 子容器'easing' : 'ease',// 特效方式,ease-in,ease-out,linear'duration' : 1000,// 每次动画执行的时间'pagination' : true,// 是否显示分页'loop' : false,// 是否循环'keyboard' : true,// 是否支持键盘'direction' : 'vertical',// 滑动的方向 horizontal,vertical,'onpageSwitch' : function(pagenum) {}};var win = $(window), container, sections;var opts = {}, canScroll = true;var iIndex = 0;var arrElement = [];var SP = $.fn.switchPage = function(options) {opts = $.extend({}, defaults, options || {});container = $(opts.container), sections = container.find(opts.sections);sections.each(function() {arrElement.push($(this));});return this.each(function() {if (opts.direction == "horizontal") {initLayout();}if (opts.pagination) {initPagination();}if (opts.keyboard) {keyDown();}});}// 滚轮向上滑动事件SP.moveSectionUp = function() {if (iIndex) {iIndex--;} else if (opts.loop) {iIndex = arrElement.length - 1;}scrollPage(arrElement[iIndex]);};// 滚轮向下滑动事件SP.moveSectionDown = function() {if (iIndex < (arrElement.length - 1)) {iIndex++;} else if (opts.loop) {iIndex = 0;}scrollPage(arrElement[iIndex]);};// 私有方法// 页面滚动事件function scrollPage(element) {var dest = element.position();if (typeof dest === 'undefined') {return;}initEffects(dest, element);}// 重写鼠标滑动事件$(document).on("mousewheel DOMMouseScroll", MouseWheelHandler);function MouseWheelHandler(e) {e.preventDefault();var value = e.originalEvent.wheelDelta || -e.originalEvent.detail;var delta = Math.max(-1, Math.min(1, value));if (canScroll) {if (delta < 0) {SP.moveSectionDown();} else {SP.moveSectionUp();}}return false;}// 横向布局初始化function initLayout() {var length = sections.length, width = (length * 100) + "%", cellWidth = (100 / length).toFixed(2)+ "%";container.width(width).addClass("left");sections.width(cellWidth).addClass("left");}// 初始化分页function initPagination() {var length = sections.length;if (length) {}var pageHtml = '<ul id="pages"><li class="active"></li>';for (var i = 1; i < length; i++) {pageHtml += '<li></li>';}pageHtml += '</ul>';$("body").append(pageHtml);}// 分页事件function paginationHandler() {var pages = $("#pages li");pages.eq(iIndex).addClass("active").siblings().removeClass("active");}// 是否支持css的某个属性function isSuportCss(property) {var body = $("body")[0];for (var i = 0; i < property.length; i++) {if (property[i] in body.style) {return true;}}return false;}// 渲染效果function initEffects(dest, element) {var transform = ["-webkit-transform", "-ms-transform","-moz-transform", "transform"], transition = ["-webkit-transition", "-ms-transition", "-moz-transition","transition"];canScroll = false;if (isSuportCss(transform) && isSuportCss(transition)) {var traslate = "";if (opts.direction == "horizontal") {traslate = "-" + dest.left + "px, 0px, 0px";} else {traslate = "0px, -" + dest.top + "px, 0px";}container.css({"transition" : "all " + opts.duration + "ms "+ opts.easing,"transform" : "translate3d(" + traslate + ")"});container.on("webkitTransitionEnd msTransitionend mozTransitionend transitionend",function() {canScroll = true;});} else {var cssObj = (opts.direction == "horizontal") ? {left : -dest.left} : {top : -dest.top};container.animate(cssObj, opts.duration, function() {canScroll = true;});}element.addClass("active").siblings().removeClass("active");if (opts.pagination) {paginationHandler();}}// 窗口Resizevar resizeId;win.resize(function() {clearTimeout(resizeId);resizeId = setTimeout(function() {reBuild();}, 500);});function reBuild() {var currentHeight = win.height(), currentWidth = win.width();var element = arrElement[iIndex];if (opts.direction == "horizontal") {var offsetLeft = element.offset().left;if (Math.abs(offsetLeft) > currentWidth / 2&& iIndex < (arrElement.length - 1)) {iIndex++;}} else {var offsetTop = element.offset().top;if (Math.abs(offsetTop) > currentHeight / 2&& iIndex < (arrElement.length - 1)) {iIndex++;}}if (iIndex) {paginationHandler();var cuerrentElement = arrElement[iIndex], dest = cuerrentElement.position();initEffects(dest, cuerrentElement);}}// 绑定键盘事件function keyDown() {var keydownId;win.keydown(function(e) {clearTimeout(keydownId);keydownId = setTimeout(function() {var keyCode = e.keyCode;if (keyCode == 37 || keyCode == 38) {SP.moveSectionUp();} else if (keyCode == 39 || keyCode == 40) {SP.moveSectionDown();}}, 150);});}})(jQuery);
0 0
- 20150721 全屏切换效果(含核心代码)
- 全屏切换效果
- 实现全屏切换效果
- 如何用css3做全屏切换效果
- Android 页面切换代码(立体效果)
- Android 页面切换代码(折叠效果)
- android几个知识点总结(全屏显示,倒计时,页面切换动画效果,obtainmessage)
- MFC淡出效果核心代码
- MFC淡出效果核心代码
- 手写js 网页全屏无缝切换效果,导航特效!
- 全屏切换
- 全屏切换
- 全屏/非全屏切换
- Android 页面切换代码(淡入淡出效果)
- Android 页面切换代码(页面旋转效果)
- android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果
- Android Studio快捷键设置 (实现原eclipse ctrl+m 代码全屏的效果)
- jquery实现的全屏带左右切换按钮和类似风车四叶子旋转切换效果的全屏广告源
- createjs初学-BitmapText使用实例
- 串口通信校验方式(even,odd,space,mark)
- 一张表更新另一张表 单行返回多行
- Android获取电话薄联系人
- iOS学习笔记3-iOS中@property和@synthesize的用法
- 20150721 全屏切换效果(含核心代码)
- tomcat服务器监控工具之probe
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- 设计模式--委托模式 C++实现
- 关于网页与firefox不兼容的问题
- 字节流与字符流的区别详解
- MVC,MVP 和 MVVM 的图示
- Swift语法—— subscript(自定义下标) 的使用
- openCV—Python(8)——图像直方图及其直方图均衡化