一屏滚动滚轮事件

参考了one-page.js。为了实现头部尾部效果。我认为很有必要自己写一下,不然用原有的插件我不知道如何实现想要的效果。写的太随意了。以后再做改正吧。

$(function() {
    $(‘header‘).css({
        marginTop: ‘-62px‘,
        transition: "all .25s linear"
    });
    $(‘header‘).removeClass(‘visible‘)
    var sections = $(‘.page‘)
    var lastAnimation=0;

function init_scroll(event, delta) {
        var leftPos = 0,
            topPos = 0
        var settings = {
            direction: ‘vertical‘,
        }
        $.each(sections, function(i) {
            $(this).css({
                position: "absolute",
                top: topPos + "%"
            }).attr("data-index", i + 1);

$(this).css({
                position: "absolute",
                left: (settings.direction == ‘horizontal‘) ? leftPos + "%" : 0,
                top: (settings.direction == ‘vertical‘ || settings.direction != ‘horizontal‘) ? topPos + "%" : 0
            });

if (settings.direction == ‘horizontal‘)
                leftPos = leftPos + 100;
            else
                topPos = topPos + 100;
        });

}
    init_scroll()
    //添加滚轮事件监听
    $(document).on(‘mousewheel DOMMouseScroll MozMousePixelScroll‘, function(event) {
        event.preventDefault();
        //处理浏览器兼容,判断滚轮方向
        var delta = event.originalEvent.wheelDelta || -event.originalEvent.detail;
        var pos,current,next;
        var timeNow = new Date().getTime();
        //滚轮事件很容易被连续触发,这里通过获得最近一次触发事件的时间与上一次触发事件
        //的时间相差的值与动画持续时间比较,若小于动画持续时间,则阻止滚轮事件
        if(timeNow - lastAnimation < 500) {
            event.preventDefault();
            return;
        }

if (delta < 0) { //滚轮向下滚动
            if ($(‘header‘).hasClass(‘visible‘)) {
                /*$(‘header‘).css({
                marginTop: "-62px",
                transition: "all .2s linear"
            });
                setTimeout(function(){$(‘header‘).removeClass(‘visible‘)},500) */
                $(‘header‘).animate({
                    "marginTop": "-62px",
                    },
                    250, function() {
                    $(‘header‘).removeClass(‘visible‘)
                });
                // return false
            }
            else if(!$(‘header‘).hasClass(‘visible‘)) {
                var index=$(".active").data(‘index‘),
                    current=$(".page[data-index=‘" + index + "‘]"),
                    next=$(".page[data-index=‘" + (index + 1) + "‘]"),
                    length=$(‘.page‘).length;
                console.log(length+1)
                if (index<=length+1) {//如果存在下一屏
                    pos=(index * 100) * -1;
                    
                    if (index<length) {
                    current.removeClass("active")
                      next.addClass("active")
                    }
                $(‘.onepage-wrapper‘).css({
                        "-webkit-transform": "translate3d(0," + pos + "%,  0)",
                        "-moz-transform": "translate3d(0," + pos + "%,  0)",
                        "-ms-transform": "translate3d(0," + pos + "%,  0)",
                        "transform": "translate3d(0," + pos + "%,  0)",
                        "-webkit-transition": "all .5s linear",
                        "-moz-transition": "all .5s linear",
                        "-ms-transition": "all .5s linear",
                        "transition": "all .5s linear"
                        });
                }
                // else if (next.data(‘index‘)==length+1) {
                        
                // }
                
            }
        } else { //滚轮向上滚动
            if ($(‘header‘).hasClass(‘visible‘)) return;
            else if ($(‘.active‘).data("index") == 1 && !$(‘header‘).hasClass(‘visible‘)) {
                $(‘header‘).addClass(‘visible‘)
                /*$(‘header‘).css({
                    marginTop: "0px",
                    transition: "all .5s linear"
                });*/  
                $(‘header‘).animate({
                    "marginTop": "0px",
                    },
                    250);
            } else if ($(‘.active‘).data("index") > 1) {
                /*$(‘header‘).css({
                    marginTop: "-62px",
                    transition: "all .5s linear"
                });*/
                     index=$(".active").data(‘index‘),
                    current=$(".page[data-index=‘" + index + "‘]"),
                    next=$(".page[data-index=‘" + (index - 1) + "‘]");
                if (next.length>0) {//如果存在下一屏

pos = ((next.data("index") - 1) * 100) * -1;
                    current.removeClass("active")
                      next.addClass("active")
                $(‘.onepage-wrapper‘).css({
                        "-webkit-transform": "translate3d(0," + pos + "%,  0)",
                        "-moz-transform": "translate3d(0," + pos + "%,  0)",
                        "-ms-transform": "translate3d(0," + pos + "%,  0)",
                        "transform": "translate3d(0," + pos + "%,  0)",
                        "-webkit-transition": "all .5s linear",
                        "-moz-transition": "all .5s linear",
                        "-ms-transition": "all .5s linear",
                        "transition": "all .5s linear"
                        });
                }    
            }

}
        lastAnimation = timeNow;
    });
})

时间: 2024-11-06 16:23:05

一屏滚动滚轮事件的相关文章

JS 滚轮事件 滚屏效果

浏览器差异:firefox滚轮事件是DOMMouseScroll,其他浏览器使用的是mousewheel firefox事件的event对象使用detail值表示滚轮反向,(-3)表示向上,(3)表示向下. 其他浏览器使用wheelDelta值表示表示滚轮方向,(120)表示向上, (-120)表示向下. 监听事件,删除监听事件:IE678使用attachEvent/detachEvent, 其他浏览器使用addEventListener/removeEventListener. 有Kissy版

【事件】滚轮事件(DOM0级),向上 || 向下 ||滚动

//滚轮事件(DOM0级) $.fn.mouseScroll = function(obj) { if (obj) { var defaults = { up: $.noop, //向上滚动时 down: $.noop, //向下滚动时 wheel: $.noop, //滚动时 time: 700, //时间间隔(防止多次触发) isPropagate: true //是否传播 }; var param = $.extend(defaults, obj); var isRun = true; v

js整频滚动展示效果(函数节流鼠标滚轮事件)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-T

解决input number类型上下滚动 禁用滚轮事件

1.去掉input在type="number"时的上下箭头 <style> input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ -webkit-appearance:textfield; } input[type="number"]{ -moz-appearance:textfield; } </style> 2.禁用input数字滚轮事件 <input

CSS-页面滑屏滚动原理

现在的网站有的时候为了简洁就是很多的单页滑屏滚动介绍,主要呈现方式有两种,一种是整体的元素一直排列下去,假设有五个需要展示的全屏页面,那么高度是500%,只是展示100%,剩下的可以通过transform进行Y轴定位,也可以通过margin-top实现,第二种就是所有的子元素和页面一样,都显示在当前页面,简单的实现第一种页面. Html代码: <div class="container"> <div class="wrapper"> <

jQuery全屏滚动插件fullPage.js中文帮助

简介 fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 主要功能 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触摸事件 支持 CSS3 动画 支持窗口缩放 窗口缩放时自动调整 可设置滚动宽度.背景颜色.滚动速度.循环选项.回调.文本对齐方式等等 兼容性 fullPage.js 支持 IE8+ 及其他现代浏览器. 使用方法 1.引入文件 <link rel="stylesheet" href="css/

AlloyTouch全屏滚动插件发布

原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 演示地址也可以点击这里. 插件代码可以在这里找到. 注意,虽然是扫码体验,但是AlloyTouch.FullPage特意对鼠标滚轮事件进行了兼容,所以PC上的全屏滚动页面也可以使用它来快速制作. 使用姿势 在设计全屏滚动插件的时候,希望开发者几乎: 不用写任何脚本快速生成精致H5 支持PC滚轮和移动触摸 酷炫的转场动效 灵活的时间轴管理

全屏滚动的原理及实现

之前用fullpage插件做过全屏滚动的页面,今天用js自己实现了一下,还蛮简单的. 首先html结构为 [html] view plain copy <div id="wrap"> <div id="main"> <div id="page1" class="page"></div> <div id="page2" class="page&q

鼠标滚轮事件

由于浏览器的不同,对鼠标滚轮事件也有所不同,大致可分为DOMMouseScroll 和onmousewheel两类 1.第一类是Firefox支持的DOMMouseScroll事件,此事件必须以addEventListener来绑定,当鼠标滚轮上下滚动时 ev.detail向上为-3,向下为3. 2.第二类是IE/chrome支持的onmousewheel事件,当鼠标滚轮上下滚动时 ev.wheelDelta向上为120,向下为-120.