首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript -鼠标轮去上课

Javascript -鼠标轮去上课
EN

Stack Overflow用户
提问于 2015-08-13 20:41:42
回答 2查看 2K关注 0票数 0

每次我使用鼠标轮(您知道正常滚动)时,我都希望JS (jquery或其他什么)滚动到特定于的类(或者id并不重要)。

我有多个div,所以像$('body').scrollTo($nextdiv)这样的代码不是一个选项。

我只想让每个车轮周期移动到一个具有特定类/id的下一个div。反向滚动也是如此。向上移动一个div (具有特定类)。

我发现了鼠标轮事件,以及如何移动到特定的div,但无法设法使它一起工作。

动画卷轴会很酷。

简单的问题。我可以在同一个舱里上课和身份证吗?前<div class="a" id="b">

EN

回答 2

Stack Overflow用户

发布于 2015-08-13 20:46:26

您可以使用以下插件:jquery.mousewheeljquery.scrollTo插件,如:

代码语言:javascript
复制
/*!
 * jQuery Mousewheel 3.1.13
 *
 * Copyright 2015 jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})});

// The actual code:
$(document).ready(function () {

var targets = $('.scroll'); // List of elements to scroll to
var index = 0;
var duration = 500;
var canScroll = true;
var cache;

function limit(x, min, max) {
	return Math.min(max, Math.max(min, x));
}

$(window).mousewheel(function (ev) {
	
	if (canScroll) {
		
		cache = index;
		
		if (ev.deltaY < 0) {
			index = index + 1; // Scrolling down, so increase index
		} else {
			index = index - 1; // Scrolling up, so decrease index
		}
	
		// Make sure the index is between 0 and (targets.length - 1)
		index = limit(index, 0, targets.length - 1);
		
		console.log(index);
			
		// Make sure to scroll if and only if the value has changed
		if (index !== cache) {
		
		// Scroll to the target element:
		$(window).scrollTo(targets.get(index), {
 			duration: duration,
			easing: 'swing'
		});

		canScroll = false;
		setTimeout(function () {
			canScroll = true;
		}, duration);
	}
}
		
ev.preventDefault();
return false;
});
});
代码语言:javascript
复制
div {
    content: ' ';
    height: 500px;
    background-color: #f2f2f2;
}

div:nth-child(even) {
    background-color: #d0d0d0;
}
代码语言:javascript
复制
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="//cdn.jsdelivr.net/jquery.scrollto/2.1.0/jquery.scrollTo.min.js"></script>

<div class="scroll">div1</div>
<div class="scroll">div2</div>
<div class="scroll">div3</div>
<div class="scroll">div4</div>
<div class="scroll">div5</div>
<div class="scroll">div6</div>

票数 0
EN

Stack Overflow用户

发布于 2015-08-13 21:06:42

快速示例,这段代码可以改进。最好是在小提琴上测试。将鼠标指向列表并滚动。

注意:我没有使用类,但是如果您了解我所做的,那么使用类是很容易的。

注2:我只是改变颜色,但是逻辑可以用你想要的任何东西来代替。

演示

演示2(带类)

代码语言:javascript
复制
var i = 0;

var list = document.getElementById("list"), length = list.children.length;
list.addEventListener("wheel", ColorLi);

function ColorLi(e) {
    //reset colors
    for(var j = 0; j < length; j++)
        list.children[j].style.color = "black";
    //calculate index
    if(e.wheelDelta > 0)
        i++;
    else
        i--;
    //fix index out of range
    i = i < 0 ? 0 : i;
    i = i > length-1 ? length-1 : i;
    //set color
    list.children[i].style.color = "red";
}
代码语言:javascript
复制
<ul id="list">
    <li style="color: red">A</li>
    <li>B</li>
    <li>C</li>
    <li>D</li>
</ul>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31998034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档