Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使鼠标滚动不作用于特定的文章?_Javascript_Jquery - Fatal编程技术网

Javascript 如何使鼠标滚动不作用于特定的文章?

Javascript 如何使鼠标滚动不作用于特定的文章?,javascript,jquery,Javascript,Jquery,作为示例,我将一个HTML站点上载到测试域。地址如下: 全屏站点,由三个模块组成,用于演示。您可以使用鼠标滚轮或在触摸设备上滑动鼠标滚轮 JS代码对此负责: /--------------变量----------------// var ticking=false; var isFirefox=(/Firefox/i.test(navigator.userAgent)); 变量isIe=(/MSIE/i.test(navigator.userAgent))| |(/Trident.*rv \:1

作为示例,我将一个HTML站点上载到测试域。地址如下:

全屏站点,由三个模块组成,用于演示。您可以使用鼠标滚轮或在触摸设备上滑动鼠标滚轮

JS代码对此负责:

/--------------变量----------------//
var ticking=false;
var isFirefox=(/Firefox/i.test(navigator.userAgent));
变量isIe=(/MSIE/i.test(navigator.userAgent))| |(/Trident.*rv \:11\/i.test(navigator.userAgent));
var滚动灵敏度设置=30//增加/减少此数字可更改触摸板手势的灵敏度(向上=不太敏感;向下=更敏感)
var SliderationSetting=600//幻灯片“锁定”的时间量
var currentSlideEnumber=0;
var TotalSlideEnumber=$(“.background”).length;
//------确定增量/滚动方向----------------//
函数视差克罗尔(evt){
如果(iFirefox){
//设置Firefox的增量
δ=evt.detail*(-120);
}否则如果(isIe){
//为IE设置增量
delta=-evt.deltaY;
}否则{
//为所有其他浏览器设置增量
delta=电动轮delta;
}
如果(滴答声!=真){
if(增量=滚动灵敏度设置){
//上卷
滴答声=真;
如果(CurrentSlideEnumber!==0){
当前滑动枚举器--;
}
上一项();
slideDurationTimeout(slideDurationSetting);
}
}
}
//------将超时设置为临时“锁定”幻灯片----------------//
函数slideDurationTimeout(slideDuration){
setTimeout(函数(){
滴答声=假;
},滑动教育);
}
//-----------添加事件侦听器----------------//
var mouseweelevent=isFirefox?“DOMMouseScroll”:“轮子”;
window.addEventListener(mouseweelEvent,uu.throttle(视差croll,60),false);
//------滑动运动----------------//
函数nextItem(){
var$previousSlide=$(“.background”).eq(currentSlideNumber-1);
$previousSlide.removeClass(“向上滚动”).addClass(“向下滚动”);
}
函数previousItem(){
var$currentlide=$(“.background”).eq(currentlidenumber);
$currentSlide.removeClass(“向下滚动”).addClass(“向上滚动”);
}
//滑动模式Rodichev Vladimir
//至少100像素是一次刷卡
//您可以使用与屏幕大小相关的值:window.innerWidth*.1
常数偏移=100;
让我们走,让我们走
window.addEventListener('touchstart',e=>{
const firstTouch=getTouch(e);
xDown=firstTouch.clientX;
yDown=firstTouch.clientY;
});
window.addEventListener('touchend',e=>{
如果(!yDown){
返回;
}
常数{
顾客:是的
}=getTouch(e);
const yDiff=yDown-yUp;
const yDiffAbs=Math.abs(yDown-yUp);
//至少是一次重击
if(数学最大值(yDiffAbs)<偏移量){
返回;
}
如果(yDiff>0){
//上卷
滴答声=真;
如果(CurrentSlideEnumber!==0){
当前滑动枚举器--;
}
上一项();
slideDurationTimeout(slideDurationSetting);
}否则{
//下卷轴
滴答声=真;
如果(currentSlideNumber!==totalSlideNumber-1){
currentSlideNumber++;
nextItem();
}
slideDurationTimeout(slideDurationSetting);
}
});
函数getTouch(e){
返回e.changedTouches[0]
}
我们进入最后一个模块,我在其中插入了测试信息,并回顾了游戏《猎头》,同样是为了演示,这些信息也将通过鼠标滚轮水平滚动

负责水平滚动块的代码“

功能水平滚动(e){
var=这个;
that.element宽度=that.element宽度| | getColumnWidth(that);
var scrollDirection=(东车轮三角洲)?(0-东车轮三角洲):(东细节),
actualColumn=Math.round(that.scrollLeft/that.elementWidth),
targetColumn=(scrollDirection>0)?actualColumn+1:actualColumn-1;
if(scrollElementToColumn(that,targetColumn))e.preventDefault();
}
函数getColumnWidth(即){
var style=window.getComputedStyle(即,null);
var columnWidth=parseFloat(style.columnWidth | | style.MozColumnWidth | | style.webkitColumnWidth);
var columnGap=parseFloat(style.columnGap | | | style.MozColumnGap | | style.webkitColumnGap);
返回列宽度+列间距;
}
函数scrollElementToColumn(即columnIndex){
that.element宽度=that.element宽度| | getColumnWidth(that);
var expectedplacetoscoll=Math.round(columnIndex*that.elementWidth),
distanceToScroll=Math.abs(that.scrollLeft-expectedPlaceToScroll),
defaultScrollShift=30,
savedScrollLeft=that.scrollLeft,
scrollShift=(defaultScrollShiftexpectedPlaceToScroll){
that.scrollLeft=that.scrollLeft-scrollShift;
}
if(that.scrollLeft!==expectedPlaceToScroll&&savedScrollLeft!==that.scrollLeft){
that.actuallyMoving=setTimeout(function(){scrollElementToColumn(that,columnIndex)},10);
返回true;
}
如果(that.actuallyMoving)clearTimeout(that.actuallyMoving);
返回false;
}
document.addEventListener(“DOMContentLoaded”,function()){
var elems=document.getElementsByClassName('mario');
var i;
对于(i=0,nb=elems.length;i
内容滚动的文章
// ------------- VARIABLES ------------- //
var isHorizontal = false;
var ticking = false;
var isFirefox = (/Firefox/i.test(navigator.userAgent));
var isIe = (/MSIE/i.test(navigator.userAgent)) || (/Trident.*rv\:11\./i.test(navigator.userAgent));
var scrollSensitivitySetting = 30; //Increase/decrease this number to change sensitivity to trackpad gestures (up = less sensitive; down = more sensitive) 
var slideDurationSetting = 600; //Amount of time for which slide is "locked"
var currentSlideNumber = 0;
var totalSlideNumber = $(".background").length;

// ------------- DETERMINE DELTA/SCROLL DIRECTION ------------- //
function parallaxScroll(evt) {
  if(isHorisontal) {
    isHorisontal = false;
    return;
  }
  if (isFirefox) {
    //Set delta for Firefox
    delta = evt.detail * (-120);
  } else if (isIe) {
    //Set delta for IE
    delta = -evt.deltaY;
  } else {
    //Set delta for all other browsers
    delta = evt.wheelDelta;
  }

  if (ticking != true) {
    if (delta <= -scrollSensitivitySetting) {
      //Down scroll
      ticking = true;
      if (currentSlideNumber !== totalSlideNumber - 1) {
        currentSlideNumber++;
        nextItem();
      }
      slideDurationTimeout(slideDurationSetting);
    }
    if (delta >= scrollSensitivitySetting) {
      //Up scroll
      ticking = true;
      if (currentSlideNumber !== 0) {
        currentSlideNumber--;
      }
      previousItem();
      slideDurationTimeout(slideDurationSetting);
    }
  }
}

// ------------- SET TIMEOUT TO TEMPORARILY "LOCK" SLIDES ------------- //
function slideDurationTimeout(slideDuration) {
  setTimeout(function() {
    ticking = false;
  }, slideDuration);
}

// ------------- ADD EVENT LISTENER ------------- //
var mousewheelEvent = isFirefox ? "DOMMouseScroll" : "wheel";
window.addEventListener(mousewheelEvent, _.throttle(parallaxScroll, 60), false);

// ------------- SLIDE MOTION ------------- //
function nextItem() {
  var $previousSlide = $(".background").eq(currentSlideNumber - 1);
  $previousSlide.removeClass("up-scroll").addClass("down-scroll");
}

function previousItem() {
  var $currentSlide = $(".background").eq(currentSlideNumber);
  $currentSlide.removeClass("down-scroll").addClass("up-scroll");
}


// SWIPE MODE Rodichev Vladimir
// at least 100 px are a swipe
// you can use the value relative to screen size: window.innerWidth * .1
const offset = 100;
let xDown, yDown

window.addEventListener('touchstart', e => {
  const firstTouch = getTouch(e);

  xDown = firstTouch.clientX;
  yDown = firstTouch.clientY;
});

window.addEventListener('touchend', e => {
  if (!yDown) {
    return;
  }

  const {
    clientY: yUp
  } = getTouch(e);
  const yDiff = yDown - yUp;
  const yDiffAbs = Math.abs(yDown - yUp);

  // at least <offset> are a swipe
  if (Math.max(yDiffAbs) < offset ) {
    return;
  }


    if ( yDiff > 0 ) {
      //Up scroll
      ticking = true;
      if (currentSlideNumber !== 0) {
        currentSlideNumber--;
      }
      previousItem();
      slideDurationTimeout(slideDurationSetting);
    } else {
      //Down scroll
      ticking = true;
      if (currentSlideNumber !== totalSlideNumber - 1) {
        currentSlideNumber++;
        nextItem();
      }
      slideDurationTimeout(slideDurationSetting);
    }
});

function getTouch (e) {
  return e.changedTouches[0]
}
function horizontalScroll(e){
  isHorisontal = true;
  var that = this;
  that.elementWidth = that.elementWidth || getColumnWidth(that);

  var scrollDirection = ( e.wheelDeltaY )? (0 - e.wheelDeltaY) : ( e.detail),
      actualColumn = Math.round( that.scrollLeft / that.elementWidth),
      targetColumn = (scrollDirection > 0 )? actualColumn + 1 : actualColumn - 1;

  if(scrollElementToColumn( that, targetColumn )) { 
    e.preventDefault(); 
  } else {
    isHorisontal = false;
  }

}

function getColumnWidth(that){
  var style = window.getComputedStyle(that, null);
  var columnWidth = parseFloat( style.columnWidth || style.MozColumnWidth || style.webkitColumnWidth );
  var columnGap = parseFloat( style.columnGap || style.MozColumnGap || style.webkitColumnGap );
  return columnWidth + columnGap;
}

function scrollElementToColumn(that, columnIndex){
  that.elementWidth = that.elementWidth || getColumnWidth(that);

  var expectedPlaceToScroll = Math.round(columnIndex * that.elementWidth),
      distanceToScroll = Math.abs( that.scrollLeft - expectedPlaceToScroll ),
      defaultScrollShift = 30,
      savedScrollLeft = that.scrollLeft,
      scrollShift = ( defaultScrollShift < distanceToScroll )? defaultScrollShift : distanceToScroll ;

  if(that.scrollLeft < expectedPlaceToScroll){
    that.scrollLeft = that.scrollLeft + scrollShift;
  }else if(that.scrollLeft > expectedPlaceToScroll){
    that.scrollLeft = that.scrollLeft - scrollShift;
  }

  if(that.scrollLeft !== expectedPlaceToScroll && savedScrollLeft !== that.scrollLeft ){
    that.actuallyMoving = setTimeout( function(){scrollElementToColumn( that, columnIndex )}, 10);
    return true;
  }

  if( that.actuallyMoving ) clearTimeout(that.actuallyMoving);
  return false;
}


document.addEventListener("DOMContentLoaded", function() {
  var elems = document.getElementsByClassName('mario');
  var i;
  for(i = 0, nb = elems.length; i < nb; i++){
    if (elems[i].addEventListener) {
      elems[i].addEventListener("mousewheel", horizontalScroll, false);// IE9, Chrome, Safari, Opera
      elems[i].addEventListener("DOMMouseScroll", horizontalScroll, false);// Firefox
    } else elems[i].attachEvent("onmousewheel", horizontalScroll);// IE 6/7/8
  }

  window.addEventListener('resize', function(e){
    console.log('resizing, i saw you !');
    for(i = 0, nb = elems.length; i < nb; i++){
      elems[i].elementWidth = getColumnWidth(elems[i]);
    }
  });
});
var isHorizontal = false; //Global variable

function parallaxScroll(evt) {
  if(isHorizontal) {
    isHorizontal = false;
    return;
  }
function horizontalScroll(e){
  isHorizontal = true;    

  // skipped

  if(scrollElementToColumn( that, targetColumn )) { 
    e.preventDefault(); 
  } else {
    isHorizontal = false;
  }