LATERAL ON-SCROLL SLIDING 是一款基于Jquery和css3开发的全屏滑动插件。将页面分为左边和右边,一边的内容是经过圆形遮罩的图片,而另一边则是相关的文字介绍。而且相邻行的图片和文字左右顺序是交替的。
随着浏览器滚动条向下移动,可视区下方的图片和文字将会以动画的形式从两边移动到靠近中线。当滚动条向上移动时,则下方淡出可视区的图片和文字将会以动画的形式向两边移开。
在左上方的固定位置有一个由圆形按钮组成的导航栏。点击某个按钮页面就会滚动到对应的位置。
width="474" height="300" title="滑动显示插件,LATERAL ON-SCROLL SLIDING" alt="滑动显示插件,LATERAL ON-SCROLL SLIDING"/>
width="474" height="300" title="滑动显示插件,LATERAL ON-SCROLL SLIDING" alt="滑动显示插件,LATERAL ON-SCROLL SLIDING"/>
1、引入以下的js和css文件
<link rel="stylesheet" type="text/css" href="css/demo.css"> <link rel="stylesheet" type="text/css" href="css/style.css"> <!--[if lt IE 9]> <link rel="stylesheet" type="text/css" href="css/styleIE.css" /> <![endif]--> <script type="text/javascript" src="js/modernizr.custom.11333.js"></script> <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="js/jquery.easing.1.3.js"></script>
2、在head标签中加入以下js代码
<script type="text/javascript"> $(function() { var $sidescroll = (function() { // the row elements var $rows = $('#ss-container > div.ss-row'), // we will cache the inviewport rows and the outside viewport rows $rowsViewport, $rowsOutViewport, // navigation menu links $links = $('#ss-links > a'), // the window element $win = $(window), // we will store the window sizes here winSize = {}, // used in the scroll setTimeout function anim = false, // page scroll speed scollPageSpeed = 2000, // page scroll easing scollPageEasing = 'easeInOutExpo', // perspective? hasPerspective = false, perspective = hasPerspective && Modernizr.csstransforms3d, // initialize function init = function() { // get window sizes getWinSize(); // initialize events initEvents(); // define the inviewport selector defineViewport(); // gets the elements that match the previous selector setViewportRows(); // if perspective add css if (perspective) { $rows.css({ '-webkit-perspective': 600, '-webkit-perspective-origin': '50% 0%' }); } // show the pointers for the inviewport rows $rowsViewport.find('a.ss-circle').addClass('ss-circle-deco'); // set positions for each row placeRows(); }, // defines a selector that gathers the row elems that are initially visible. // the element is visible if its top is less than the window's height. // these elements will not be affected when scrolling the page. defineViewport = function() { $.extend($.expr[':'], { inviewport: function(el) { if ($(el).offset().top < winSize.height) { return true; } return false; } }); }, // checks which rows are initially visible setViewportRows = function() { $rowsViewport = $rows.filter(':inviewport'); $rowsOutViewport = $rows.not($rowsViewport) }, // get window sizes getWinSize = function() { winSize.width = $win.width(); winSize.height = $win.height(); }, // initialize some events initEvents = function() { // navigation menu links. // scroll to the respective section. $links.on('click.Scrolling', function(event) { // scroll to the element that has id = menu's href $('html, body').stop().animate({ scrollTop: $($(this).attr('href')).offset().top }, scollPageSpeed, scollPageEasing); return false; }); $(window).on({ // on window resize we need to redefine which rows are initially visible (this ones we will not animate). 'resize.Scrolling': function(event) { // get the window sizes again getWinSize(); // redefine which rows are initially visible (:inviewport) setViewportRows(); // remove pointers for every row $rows.find('a.ss-circle').removeClass('ss-circle-deco'); // show inviewport rows and respective pointers $rowsViewport.each(function() { $(this).find('div.ss-left').css({ left: '0%' }).end().find('div.ss-right').css({ right: '0%' }).end().find('a.ss-circle').addClass('ss-circle-deco'); }); }, // when scrolling the page change the position of each row 'scroll.Scrolling': function(event) { // set a timeout to avoid that the // placeRows function gets called on every scroll trigger if (anim) return false; anim = true; setTimeout(function() { placeRows(); anim = false; }, 10); } }); }, // sets the position of the rows (left and right row elements). // Both of these elements will start with -50% for the left/right (not visible) // and this value should be 0% (final position) when the element is on the // center of the window. placeRows = function() { // how much we scrolled so far var winscroll = $win.scrollTop(), // the y value for the center of the screen winCenter = winSize.height / 2 + winscroll; // for every row that is not inviewport $rowsOutViewport.each(function(i) { var $row = $(this), // the left side element $rowL = $row.find('div.ss-left'), // the right side element $rowR = $row.find('div.ss-right'), // top value rowT = $row.offset().top; // hide the row if it is under the viewport if (rowT > winSize.height + winscroll) { if (perspective) { $rowL.css({ '-webkit-transform': 'translate3d(-75%, 0, 0) rotateY(-90deg) translate3d(-75%, 0, 0)', 'opacity': 0 }); $rowR.css({ '-webkit-transform': 'translate3d(75%, 0, 0) rotateY(90deg) translate3d(75%, 0, 0)', 'opacity': 0 }); } else { $rowL.css({ left: '-50%' }); $rowR.css({ right: '-50%' }); } } // if not, the row should become visible (0% of left/right) as it gets closer to the center of the screen. else { // row's height var rowH = $row.height(), // the value on each scrolling step will be proporcional to the distance from the center of the screen to its height factor = (((rowT + rowH / 2) - winCenter) / (winSize.height / 2 + rowH / 2)), // value for the left / right of each side of the row. // 0% is the limit val = Math.max(factor * 50, 0); if (val <= 0) { // when 0% is reached show the pointer for that row if (!$row.data('pointer')) { $row.data('pointer', true); $row.find('.ss-circle').addClass('ss-circle-deco'); } } else { // the pointer should not be shown if ($row.data('pointer')) { $row.data('pointer', false); $row.find('.ss-circle').removeClass('ss-circle-deco'); } } // set calculated values if (perspective) { var t = Math.max(factor * 75, 0), r = Math.max(factor * 90, 0), o = Math.min(Math.abs(factor - 1), 1); $rowL.css({ '-webkit-transform': 'translate3d(-' + t + '%, 0, 0) rotateY(-' + r + 'deg) translate3d(-' + t + '%, 0, 0)', 'opacity': o }); $rowR.css({ &nbs