热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

h5滚动隐藏滚动条_JS拖拽专题(三)——「实战」通过解一元一次方程实现自定义滚动条...

欢迎来到我的JS拖拽专题系列文章,更多精彩内容持续更新中,欢迎关注:)上一章节我们通过拖拽的变形实现了一个简单的轮播图示例。学习了如何利用

欢迎来到我的JS拖拽专题系列文章,更多精彩内容持续更新中,欢迎关注 :)

32ca9f30ef4127f7f438e1176e0603c6.png

上一章节我们通过拖拽的变形实现了一个简单的轮播图示例。学习了如何利用鼠标的位置差去作用在图片的平移样式上。

本章目标
  1. 拖拽时端点的条件判断
  2. 如何将拖拽的滚动条的位置去找出相应的内容滚动的位置。(解简单的一元一次方程)

先来看我们今天的最终效果!

abc1dde8f75b4742cd12adce2fafaefc.gif

有时候我们的web页面上经常需要用到的自定义的滚动条。那么接下来跟着我就去实现这样的一个示例吧。

布局

这个布局就比较简单了。7个li上下依次排列。父级container设置高度并添加overflow:hidden溢出隐藏。然后container的右侧添加一个自定义滚动条的dom,并设置样式。不多赘述,贴代码:

63e178e9cbe288246b6b50a259d4d5d3.png
JS核心

1、单独拖拽滚动条上下滑动,给滚动条添加mousedown事件,分析可知,鼠标上下滑动的距离就是滚动条滑动的距离。

这时候滑动条有上下两个临界条件

  • 滚动条top值不能小于0
  • 滚动条top值不能大于容器的高减去滚动条本身的高

2、重点来了:滚动条滚动的距离要映射到左侧内容的滚动。我们接下来找两个临界点。

  • 当滚动条的位置在最顶点的时候,内容滚动区域也在最顶端
  • 当滚动要的位置在最底端的时候,内容滚动区域也在最底端

也就是说,滚动条在滚动的过程中,当前top值与当前容器的高度存在一元一次方程式。

即:y = kx + b

前面我们找出了两个临界点:当x = 0 时,y = 0 ;这时候,我们代入到公式中即:

0 = 0 * k + b => b = 0 ;

所以 :y = kx

我们还有一个条件,当滚动条最下面的时候,这时候

k = 滚动条的top值/ 最大可以滚动范围

var k = scrollbar.style.top / ( containerH - scrollBarH);

由于两个滚动的k是一样的,所以我们可以很轻松的计算出内容滚动的距离。 这里需要注意的是由于当滚动条下面滑动的时候,内容区域是往上走的。所以在设置内容区域的滚动距离的时候方向记得取反~

deaf25a9956fdacbe3fb9ca09e143e0d.png

完整的代码

总结:

1、自定义滚动条的基本原理。通过滚动条的位置变化去改变内容滚动的位置,两者之前的滚动比例k是一样的,比如:当滚动条在最顶点的时候,内容区域也在最顶点,当滚动条滚动到最下面的时候,内容滚动也到最下面。

2、滚动条可滚动的范围应该是父容器的高度-滚动条的高度。同理,内容区域可滚动的范围应该是内容区域本身的高度-父容器的高度。

3、在我们平时的web开发中,由一个动作去控制另一个元素的运动的时候,通常是满足一元一次方程,也就是说他们之间存在一个比例关系,我们要做的就是找出这个比例系数,也就是找关系解一元一次方程即可!


这里是【畅哥聊技术】JS拖拽专题系列技术文章,更多精彩内容持续更新中。。。

未完待续。。。



推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
author-avatar
苏小明2602896955
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有