JS实现长图上下滚动效果


Posted in Javascript onMarch 19, 2020

本文实例为大家分享了JS实现长图上下滚动的具体代码,供大家参考,具体内容如下

案例描述

将一张长图放在某一固定长宽的盒子里,当鼠标置于盒子的上半部分时,图片向下滑直到到达图片的底部停止;当鼠标置于盒子的下半部分时,图片向上滑直到到达图片的顶部停止。

案例图示

JS实现长图上下滚动效果

HTML

<div id="box">
 <img id="pic" src="./program1/images/1.jpg" alt="">
 <div id="top"></div>
<div id="bottom"></div>

CSS

CSS不作过多解释,详解请看注释部分

//通用样式
 * {
 margin: 0;
 padding: 0;
 }
 #box {
 width: 750px;
 height: 200px;
 border: 1px solid #000;
 margin: 200px auto;
 overflow: hidden; /*图片溢出部分隐藏*/
 position: relative; /*子绝父相*/
 }

 #pic {
 position: absolute;
 left: 0;
 right: 0;
 }

 
 #top {
 width: 100%;
 height: 50%;
 position: absolute; /*子绝父相*/
 left: 0;
 cursor: pointer; /*鼠标*/
  /* 顶部对齐 */
 top:0; 
 }
 
 #bottom {
 width: 100%;
 height: 50%;
 position: absolute; /*子绝父相*/
 left: 0;
 cursor: pointer;
 /* 底部对齐 */
 bottom: 0;
 }
</style>

JS核心代码

JS详解----监听鼠标进入事件(以盒子上半部分为例)

鼠标停留在盒子上半部分时,使用onmouseover事件。首先要清除定时器,否则可能会出现定时器重叠现象;再设置定时器,定时器中的num就是改变图片的top属性以达到图片向上滑动的效果。if语句中的条件是为了达到图片到达底部时停止向上滑的目的。(盒子下半部分类似)

top.onmouseover = function(){
  // 改变pic中的top 
  // 清除定时器
  // alert(0);
  clearInterval(intervalId);

  // 设置定时器 
  intervalId = setInterval(function(){
  if(num > -600){
   num -= 10;
   pic.style.top = num + "px";
  }
  
  },20);

JS详解----监听鼠标移出事件(以盒子上半部分为例)

鼠标移出时使用onmouseout事件,清除定时器。(盒子下半部分类似)

top.onmouseout = function() {
  clearInterval(intervalId);
 }

JS全部代码展示

<script>
 window.onload = function() {
 // 获取标签
 var box = document.getElementById('box');
 var pic = document.getElementById('pic');
 var top = document.getElementById('top');
 var bottom = document.getElementById('bottom');
 var intervalId, num = 0;
 // 鼠标进入上半部分
 top.onmouseover = function(){
  // 改变pic中的top 
  // 清除定时器
  // alert(0);
  clearInterval(intervalId);

  // 设置定时器
  intervalId = setInterval(function(){
  if(num > -600){
   num -= 10;
   pic.style.top = num + "px";
  }
  
  },20);

 };
  // 鼠标移出上半部分
 top.onmouseout = function() {
  clearInterval(intervalId);
 }
 // 鼠标进入下半部分
 bottom.onmouseover = function(){
  // 改变pic中的top 
  // 清除定时器
  // alert(0);
  clearInterval(intervalId);

  // 设置定时器
  intervalId = setInterval(function(){
  if(num < 0){
   num += 10;
   pic.style.top = num + "px";
  }
  
  },20);
 };
 // 鼠标移出下半部分
 bottom.onmouseout = function() {
  clearInterval(intervalId);
 };
 
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
Jun 18 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
javascript 应用小技巧方法汇总
Jul 05 Javascript
正则表达式优化JSON字符串的技巧
Dec 24 Javascript
基本DOM节点操作
Jan 17 Javascript
JavaScript实现计数器基础方法
Oct 10 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
Vue中的Props(不可变状态)
Sep 29 Javascript
js实现简单放大镜效果
Mar 07 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 Javascript
JavaScript实现简单计算器
Mar 19 #Javascript
jQuery实现颜色打字机的完整代码
Mar 19 #jQuery
webpack 动态批量加载文件的实现方法
Mar 19 #Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 #Javascript
js实现经典贪吃蛇小游戏
Mar 19 #Javascript
javascrpt密码强度校验函数详解
Mar 18 #Javascript
Node.js Domain 模块实例详解
Mar 18 #Javascript
You might like
分享PHP入门的学习方法
2007/01/02 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PDO::getAttribute讲解
2019/01/28 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
深入浅析python定时杀进程
2016/06/06 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python中异常捕获方法详解
2017/03/03 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
python输入错误后删除的方法
2019/10/12 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
J2EE模式面试题
2016/10/11 面试题
客户表扬信范文
2014/01/10 职场文书
《狼》教学反思
2014/03/02 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电