热门标签 | 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拖拽专题系列技术文章,更多精彩内容持续更新中。。。

未完待续。。。



推荐阅读
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
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社区 版权所有