javascript - 如何将自定义滚动条应用到整个页面?

标签 javascript jquery html scroll scrollbar

我想包括Jquery custom content scroller到我的页面以替换主滚动条。但由于某种原因我无法让它工作。

这是我的 Codepen .

它适用于一些较小的内容 block ,但如何将插件应用到主滚动?

HTML

<canvas id="canvas"></canvas>

JS

(function($) {
  $(window).load(function() {
  $("canvas").mCustomScrollbar();
  });
})(jQuery);

最佳答案

您可以使用 Nicescroll 插件来实现此目的。将其添加到 html 元素上:$("html").niceScroll();

更多详细信息请参见:http://areaaperta.com/nicescroll/

请尝试:

(function($) {
  $(window).load(function() {
  $("html").niceScroll();
  });
})(jQuery);

var timeOut;
window.onresize = function() {
  if (timeOut)
    clearTimeout(timeOut);
  timeOut = setTimeout(draw, 10);
}

window.onload = draw;
window.onscroll = navigate;

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext('2d');

forest = new Image;
forest.src = 'http://p1.pichost.me/i/33/1561150.jpg';

function navigate() {
  draw()
}

function draw(scroll) {
  scroll = (window.scrollY || window.pageYOffset) / (document.body.clientHeight - window.innerHeight) * 3000;
  canvas.setAttribute('width', window.innerWidth);
  canvas.setAttribute('height', window.innerHeight);

  drawImageProp(ctx, forest, 0, (-scroll * 3.9) / 4, canvas.width, canvas.height + (scroll * 3.9) / 2);
}

function drawImageProp(ctx, img, x, y, w, h, offsetX, offsetY) {

  if (arguments.length === 2) {
    x = y = 0;
    w = ctx.canvas.width;
    h = ctx.canvas.height;
  }

  // default offset is center
  offsetX = typeof offsetX === "number" ? offsetX : 0.5;
  offsetY = typeof offsetY === "number" ? offsetY : 0.5;

  // keep bounds [0.0, 1.0]
  if (offsetX < 0) offsetX = 0;
  if (offsetY < 0) offsetY = 0;
  if (offsetX > 1) offsetX = 1;
  if (offsetY > 1) offsetY = 1;

  var iw = img.width,
    ih = img.height,
    r = Math.min(w / iw, h / ih),
    nw = iw * r, // new prop. width
    nh = ih * r, // new prop. height
    cx, cy, cw, ch, ar = 1;

  // decide which gap to fill
  if (nw < w) ar = w / nw;
  if (nh < h) ar = h / nh;
  nw *= ar;
  nh *= ar;

  // calc source rectangle
  cw = iw / (nw / w);
  ch = ih / (nh / h);

  cx = (iw - cw) * offsetX;
  cy = (ih - ch) * offsetY;

  // make sure source rectangle is valid
  if (cx < 0) cx = 0;
  if (cy < 0) cy = 0;
  if (cw > iw) cw = iw;
  if (ch > ih) ch = ih;

  // fill image in dest. rectangle
  ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h);

}
body {
  height: 1000vh;
  margin: 0;
} 

canvas {
  width: 100%;
  height: 100vh;
  position: fixed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="view-source:http://areaaperta.com/nicescroll/js/jquery.nicescroll.min.js"></script>
<canvas id="canvas"></canvas>

关于javascript - 如何将自定义滚动条应用到整个页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33953993/

相关文章:

javascript - 我想显示 slider div,直到鼠标悬停在 jquery 中有许多内部 div 的容器 div 上吗?

javascript - 使用 << >> 和 Prev 和 Last 进行分页并停止无限分页

javascript - Underscore.js 默认函数的副作用免费版本?

javascript - Angular 和 JavaScript : Date is 7 days old and is monday

javascript - 当 multipule 运行时,将加载图标附加到 Table TD 以进行 ajax 调用会混淆

jquery 移动主题缩放

javascript - 来自 div 的 jquery ui Accordion 加载了 ajax

html - 下划线和破折号不可见

javascript - 如何使一个 Angular 指令只能由一个组件使用?

javascript - 样式绑定(bind)和 ngStyle 似乎都无法在 Angular5 的 DIV 中设置背景图像