Javascript和jquery事件--滚动条事件和自定义滚动条事件样式
很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了。除了事件以外,对滚动条样式的调整也记在这里吧。
滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默认事件在各个浏览器大多一样,它的样式在各浏览器都有不同的表现。但是通过js我们可以阻止它的默认事件,使用css也可以在一定程度上更改它的样式。如果你不想要浏览器的滚动条,你可以通过监听鼠标滚轮事件以及使用动画(就像轮播图片那样)自定义事件,推荐js事件应用(带框拖拽、自定义滚动条),但是这里就不做深入了。
(1)滚动条事件
浏览器自定的滚动条有以下特点:
a.默认事件是元素上鼠标滚轮带动滚动条和界面滚动以及鼠标拖拽滚动条会带动界面滚动。
b.元素上鼠标滚动时默认禁止冒泡,元素内滚动条事件不会带动父元素及祖先元素的滚动事件。
c.该元素滚动条滚动条滚动到顶部(底部)后继续往上(往下)滚动的话,会触发滚动父元素的事件(这是默认事件,与冒泡无关)
在scroll事件对象里面我们要关注的值是触发事件元素的:
①scrollTop/scrollLeft:滚动的距离,一开始默认都是0,往下滚动scrollTop增加,往右scrollLeft增加。
②scrollHeight/scrollWidth:整个页面内容的大小,包括被隐藏的部分。
③clientHeight/clientWidth:视图显示部分的大小
如果要实现:
①判断滚动方向,记录之前的scrollTop,然后触发后进行比较判断
②判断是否到达顶部底部,scrollTop为0到达顶部,scrollTop+clientHeight==scrollHeight到达底部
var f1top = document.getElementById('f1').scrollTop;
function topOrBottom(e){
var e = e||event||window.event;
var element = e.target||e.srcElement;
var scrollTop = element.scrollTop;
var scrollHeight = element.scrollHeight;
var clientHeight = element.clientHeight;
//上下滚动的时候,scrollTop=0时滚动条在顶部,scrollTop+clientHeight=scrollHeight时滚动条在底部
if(scrollTop==0){
console.log('到了顶部!');
}
else if(scrollTop+clientHeight==scrollHeight){
console.log('到了底部!');
}
//判断滚动方向
var f = scrollTop - f1top;
f1top = scrollTop;
if(f>0){
console.log('向下');
}
else if(f<0){
console.log('向上');
}
}
//js
document.getElementById('f1').onscroll=topOrBottom;
那么scroll事件和鼠标滚轮事件WheelEvent有什么关系和区别呢?滚轮事件只是触发onscroll事件的条件之一(另一个是拖动滚动条),滚轮事件是一次滚动鼠标滚轮,而在这一次滚轮之中,会大约每15毫秒触发一次该元素的onscroll事件(如果该元素可以滚动),如果该元素不可以滚动(或者到顶到底了),就会按顺序触发该元素的祖先元素中的可滚动元素。
我关注到滚动条事件的原因就是要禁用掉滚动条滚动到底部继续进行鼠标滚轮滚动会触发父元素滚动事件的默认事件。元素的滚动条事件是绑定在元素滚轮事件上面的默认事件,而在滚动条滚动到底部再进行一次向下滚动鼠标滚轮的操作,就不会再触发该元素的scroll事件,而是按顺序触发父元素的scroll事件,这同样是默认事件,所以阻止冒泡是不可行的,而单纯地阻止默认事件也是不可行的。具体来说,我就是要监听鼠标滚轮事件,当事件触发时出现元素已经到达底部并且这次滚轮方向也是向下(顶部情况相反)时,禁用默认事件。代码如下:
/*阻止鼠标滚动事件联动*/
function StopP(e){
e = e||window.event; if (e.stopPropagation) { //取消冒泡
e.stopPropagation();
} else{
e.cancelBubble = true;
};
var scrollup = false;
/*判断鼠标滚动方向*/
if (e.wheelDelta) { //判断浏览器IE,谷歌滑轮事件
if (e.wheelDelta > 0) { //当滑轮向上滚动时
scrollup = true;
}
} else if (e.detail) { //Firefox滑轮事件
if (e.detail> 0) { //当滑轮向上滚动时
scrollup = true; }
} var ele=e.target||e.srcElement;
var eleheight = ele.clientHeight;//视图高度
var conheight = ele.scrollHeight;//内容高度
var scrtop = ele.scrollTop;//滚动条离顶部距离
var c = 0; /*阻止滚动条到达顶部、底部时带动body的滚动*/
if(scrollup==true&&scrtop==0){
c = 1;
}
if(scrollup==false&&(scrtop+eleheight>=conheight)){
c = 1;
}
if(c==1){
if (e.preventDefault) {//取消默认行为
e.preventDefault();
} else{
e.returnValue = false;
};
} }
(2) 滚动条自定义样式
默认滚动条不符合要求,需要自定义或者隐藏滚动条。按常规方法来说谷歌和ie都提供了在css中更改滚动条样式的方法,但是限制都很大,而且都不怎么兼容。火狐则没有提供方法,但是可以使用插件。下面是一段谷歌,ie修改css的代码,引用自(https://blog.csdn.net/zh_rey/article/details/72473284)
/*滚动条样式*/
.myscroll::-webkit-scrollbar{/*滚动条整体部分,其中的属性有width,height,background,border等(就和一个块级元素一样)(位置1)*/
width:10px;
height:10px;
}
.myscroll::-webkit-scrollbar-button{/*滚动条两端的按钮,可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果(位置2)*/
background:#74D334;
}
.myscroll::-webkit-scrollbar-track{/*外层轨道,可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果(位置3)*/
background:#FF66D5;
}
.myscroll::-webkit-scrollbar-track-piece{/*内层轨道,滚动条中间部分(位置4)*/
background:#FF66D5;
}
.myscroll::-webkit-scrollbar-thumb{/*滚动条里面可以拖动的那部分(位置5)*/
background:#FFA711;
border-radius:4px;
}
.myscroll::-webkit-scrollbar-corner {/*边角(位置6)*/
background:#82AFFF;
}
.myscroll::-webkit-scrollbar-resizer {/*定义右下角拖动块的样式(位置7)*/
background:#FF0BEE;
}
.myscroll{
scrollbar-arrow-color: #f4ae21; /**//*三角箭头的颜色*/
scrollbar-face-color: #333; /**//*立体滚动条的颜色*/
scrollbar-3dlight-color: #666; /**//*立体滚动条亮边的颜色*/
scrollbar-highlight-color: #666; /**//*滚动条空白部分的颜色*/
scrollbar-shadow-color: #999; /**//*立体滚动条阴影的颜色*/
scrollbar-darkshadow-color: #666; /**//*立体滚动条强阴影的颜色*/
scrollbar-track-color: #666; /**//*立体滚动条背景颜色*/
scrollbar-base-color:#f8f8f8; /**//*滚动条的基本颜色*/
}
我还看到了一个方法,能做到隐藏滚动条,配合js就可以自定义滚动样式了。那就是在有滚动条的元素'#c1'外层套一个div,设置宽度是'#c1'不包括滚动条的宽度并设置overflow:hidden。这样的话界面中就不会看到滚动条(即使它其实还在),你也可以自己设置新滚动条的样式,然后绑定事件来设置滚动。
参考:
https://www.cnblogs.com/liuyanxia/p/8675752.html
Javascript和jquery事件--滚动条事件和自定义滚动条事件样式的更多相关文章
- day52—JavaScript拖拽事件的应用(自定义滚动条)
转行学开发,代码100天——2018-05-07 前面的记录里展示了JavaScript中鼠标拖拽功能,今天利用拖拽功能实现另一个应用场景——自定义滚动条(作为控制器)的用法. 常通过自定义滚动条控制 ...
- dispatchEvent 自定义触发事件,常用于自定义鼠标事件或点击事件
自定义事件的触发又是不可避免的,由于浏览器兼容性问题,我们要分开说了,针对标准浏览器和IE6/7等考古浏览器. 1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEve ...
- WPF自学入门(四)WPF路由事件之自定义路由事件
在上一遍博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自定义路由事件.接下来我们一起来看一下WPF中的自定义路由事件怎么进行创建吧. 创建自定义路由事件分为3个步骤: 1.声明并注册 ...
- jQuery Validate 表单验证插件----自定义校验结果样式
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...
- javascript 学习之自定义滚动条加滚轮事件
要自己写一个自定义滚动条加上滚轮事件,之前的没有滚轮事件不完整,今天整理了一个. 1.滚轮事件是不兼容的,firefox中是必需要用事件绑定的添加,用的DOMMouseScroll,当滚动鼠标的时候, ...
- 【Python全栈-JavaScript】jQuery事件
jQuery事件 一.页面载入 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数. 这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度. 简单地说,这个方法纯粹是对向 w ...
- jQuery 学习笔记(5)(事件绑定与解绑、事件冒泡与事件默认行为、事件的自动触发、自定义事件、事件命名空间、事件委托、移入移出事件)
1.事件绑定: .eventName(fn) //编码效率略高,但部分事件jQuery没有实现 .on(eventName, fn) //编码效率略低,所有事件均可以添加 注意点:可以同时添加多个相同 ...
- Javascript和jquery事件--事件冒泡和事件捕获
jQuery 是一个 JavaScript 库,jQuery 极大地简化了 JavaScript 编程,在有关jq的描述中,jq是兼容现有的主流浏览器,比如谷歌.火狐,safari等(当然是指较新的版 ...
- Javascript和jquery事件--鼠标事件的小结
1.鼠标事件的主要事件应该是mouseup, mousedown, mousewheel, mousemove, mouseover, moveout. <1>其中mouseup和mous ...
随机推荐
- XML解析——DOM解析
XML:可扩展性标记语言,主要用来传输和存储数据,相对于HTML的各种标签规范,XML的标签可以让用户根据语义自己进行定义,适用于web传输. JSON和XML的区别: (1).XML定义 扩展标记语 ...
- Linux监控(OS,MySQL,Tomcat,Apache)
关于逐步脱离开发岗位的意见,老大已经批准了,接下来我的主要工作就是"运维+数据库管理".感谢杰民兄和小马哥能接受我的骚扰.接下来还会去骚扰他们,同一时候也会去骚扰董大爷,小刚总,心 ...
- 转:IOS的推送。是一个强大的功能
IOS下我们很多人天天开着 邮件推送 微信推送 QQ推送 微博推送 新浪微博推送,安卓敢吗? 五个后台进程消耗电.流量谁敢这么做?现在安卓也出了推送,但绝对是伪推送.实际是挂了个进程,关掉了就收不到. ...
- Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行
背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行js ...
- EC2 开启 IPV6 访问 和 禁止重启后自动分配IP地址
EC2 开启 IPV6 访问 和 禁止重启后自动分配IP地址进入 VPC 控制台,对当前 VPC 添加 IPV6 CIDR 块对该 VPC 的路由表进行修改,添加其它路由,第一个空填::/0,第二个空 ...
- vim 常用插件功能跟配置
在之前的公司,一直是使用别人配置好的vim 环境,他当时配置的功能很强大,查看源码的时候,非常的方便.至少我一直都是用它来看源码,从来没有使用过source insight.现在换了工作,但之前养成的 ...
- 用select标签实现跳转
用select标签实现跳转 一.用select标签实现跳转JavaScript代码 我们经常有遇到需要用select标签跳转到新网页的情况,dw生成的代码太复杂,那么有没有精简的代码得以实现呢?经过仔 ...
- Java 关于运算结果
今天发现一个自己的一个知识误区 原来有些自己以为会发生异常的运算,并没有异常发生,只要运算符两端存在至少一个浮点数 比如: public class Demo { /** * @param args ...
- js对数组进行操作
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- 体验域名注册解析与SSL证书