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 相关文章推荐
jQuery 源代码显示控件 (Ajax加载方式).
May 18 Javascript
jquery 弹出登录窗口实现代码
Dec 24 Javascript
jquery操作select详解(取值,设置选中)
Feb 07 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
javascript基础语法——全面理解变量和标识符
Jun 02 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
Node.js readline模块与util模块的使用
Mar 01 Javascript
jQuery使用动画队列自定义动画操作示例
Jun 16 jQuery
通过js给网页加上水印背景实例
Jun 17 Javascript
vue实现可拖拽的dialog弹框
May 13 Vue.js
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验证码生成类分享
2014/08/21 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
JavaScript DOM基础
2015/04/13 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
简单的js计算器实现
2016/10/26 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
环卫工作汇报材料
2014/10/28 职场文书
会议欢迎词
2015/01/23 职场文书
英语邀请函范文
2015/02/02 职场文书
研究生导师推荐信
2015/03/25 职场文书
如何拟写通知正文?
2019/04/02 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫