JavaScript之图片操作4

本次要实现的效果是,在一个盒子里面有一张长图,只显示了一部分,为方便用户浏览,当鼠标移入时,图片开始滚动,将盒子分成上下两部分,当鼠标移入上部分时,图片向上滚动,当鼠标移入下部分时,图片向下滚动。

为了实现上面的效果,我们需要在html中进行简单的布局:

<div id="box">
     <img id="pic" src="images/timg.jpg" alt="">
     <span id="to_top"></span>
     <span id="to_bottom"></span>
</div>

其中div为外层固定大小的大盒子,因为图片大于盒子,所以需要将盒子设置超出隐藏,图片上下滚动式通过定位实现的,需要将图片设置为相对父级定位,通过两个span来判断鼠标移入时的位置是在上半部分还是下半部分,所以两个span均为盒子的一半,分别位于盒子的上半部分和下半部分。

<style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }

        #box{
            width: 750px;
            height: 400px;
            border: 1px solid red;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }

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

        #to_top, #to_bottom{
            width: 100%;
            height: 50%;
            /*background-color: greenyellow;*/
            position: absolute;
            left: 0;
            cursor: pointer;
        }

        #to_top{
            top: 0;
        }

        #to_bottom{
            bottom: 0;
        }
 </style>

接下来开始写相应的事件,首先需要获取相应的元素标签

var box = document.getElementById("box");
var pic = document.getElementById("pic");
var to_top = document.getElementById("to_top");
var to_bottom = document.getElementById("to_bottom");

然后监听鼠标事件,并用定时器实现动画效果。

to_top.onmouseover = function () {
       timer = setInterval(function () {
            num += 10;
            pic.style.top = num + ‘px‘;
       }, 20);
};
to_bottom.onmouseover = function () {
       timer = setInterval(function () {
            num += 10;
            pic.style.top = num + ‘px‘;
       }, 20);
};
box.onmouseout = function () {
      clearInterval(timer);
}

现在基本可以实现图片相应鼠标,进行上下滑动了,但还是有问题,首先是定时器累加,其次是图片无限制的上下滑动,针对这两个问题,我们需要在每次鼠标进入时清除定时器,另外就是判断滚动的临界值:

  • 图片向下滚动时,顶部距离父级元素的位置不能大于0,即初始的默认值位置
  • 图片向上滚动时,顶部距离父级元素的位置不能小于图片长度与盒子高度的差值

根据上面的两点,重新整理上面的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }

        #box{
            width: 750px;
            height: 400px;
            border: 1px solid red;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }

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

        #to_top, #to_bottom{
            width: 100%;
            height: 50%;
            /*background-color: greenyellow;*/
            position: absolute;
            left: 0;
            cursor: pointer;
        }

        #to_top{
            top: 0;
        }

        #to_bottom{
            bottom: 0;
        }
    </style>
</head>
<body>
    <div id="box">
        <img id="pic" src="images/timg.jpg" alt="">
        <span id="to_top"></span>
        <span id="to_bottom"></span>
    </div>

<script>
    window.onload = function () {
        // 1. 获取标签
        var box = document.getElementById("box");
        var pic = document.getElementById("pic");
        var to_top = document.getElementById("to_top");
        var to_bottom = document.getElementById("to_bottom");

        var timer = null, num = 0;

        // 2. 监听鼠标事件
        to_top.onmouseover = function () {
            // 2.1 清除定时器
            clearInterval(timer);

            // 2.2 设置定时器
            timer = setInterval(function () {
                 // 步长
                 num -= 10;

                 // 判断
                 if(num >= -2466){
                     pic.style.top = num + ‘px‘;
                 }else {
                     clearInterval(timer);
                 }
            }, 20);
        };
        to_bottom.onmouseover = function () {
            // 2.1 清除定时器
            clearInterval(timer);

            // 2.2 设置定时器
            timer = setInterval(function () {
                // 步长
                num += 10;

                // 判断
                if(num <= 0){
                    pic.style.top = num + ‘px‘;
                }else {
                    clearInterval(timer);
                }
            }, 20);
        };
        box.onmouseout = function () {
            // 清除定时器
            clearInterval(timer);
        }
    }
</script>
</body>
</html>

完整代码下载链接:点这里

原文地址:https://www.cnblogs.com/yuyujuan/p/9539245.html

时间: 2024-08-03 13:29:59

JavaScript之图片操作4的相关文章

JavaScript之图片操作1

在网页中,经常需要对图片经常各种操作,包括切换,轮播等等,接下来将总结一些常见的图片操作,首先是最简单前后切换. 如上面所示,通过点击右边的按钮切换左边的图片,为了实现想要的效果,首先,我们需要在html中创建一个放照片的容器和两个切换的按钮. <img id="icon" src="img/icon_01.png" alt=""> <button id="prev">上一张</button>

JavaScript之图片操作3

在页面布局中,常常会用到九宫格布局,如下图所示: 本次我们就以九宫格为基础进行图片的布局操作,首先我们以上面的图片的为例,假设每个格子的大小都相同,将每一个格子相对其父元素进行定位,这样,我们只需要控制每个格子的left和top属性,就可以控制图片的位置了,例如上面序号为4的格子,其left属性值就是每个格子一倍的宽度值,top属性值就是每个格子的一倍高度值,以此为基础,我们将实现下面的效果: 通过用户点击自定义每列显示的个数,来动态控制布局. 首先我们需要在页面中写入基础代码,实现图一的默认显

JavaScript之图片操作2

在前一次,我们实现最简单的图片切换效果,这一次,依旧还是图片切换,具体效果如下: 通过点击下面的小图,上面的大图和标题随之切换.因此,我们需要三个容器分别放标题,大图和小图. <!--大图描述--> <p id="des">蒲公英</p> <!--大图展示--> <img id="big_img" src="img/1.jpg" width="540"> <!-

UIScrollView缩放图片操作

要想ScrollView缩放,必须告诉缩放那个控件,它自身的大小是不会缩放的: 并且ScrollView只能缩放自己内部的子控件: 1:这时就要用到代理,代理告诉ScrollView缩放哪个控件.(设置代理对象) 2:要想成为ScrollView的代理就要遵守协议:UIScrollViewDelegate (遵守协议) 3:成为代理后实现协议里的方法:viewForZoomingInScrollView;这个方法是返回要缩放的子控件,就是代理告诉ScrollView哪个控件要缩放 或者说这个方法

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

使用JavaScript判断图片是否加载完成的三种实现方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

JavaScript日期时间操作

js日期操作: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate.getDate(); //获取当前日(1-31)myDate.getDay(); //获取当前星期X(0-6,0代表星期天)myDate.getTime(); //获取当前时间(从1970.1

Javascript 将图片的绝对路径转换为base64编码

Javascript将图片的绝对路径转换为base64编码 我们可以使用canvas.toDataURL的方法将图片的绝对路径转换为base64编码:在这我们引用的是淘宝首页一张图片如下: var img = "https://img.alicdn.com/bao/uploaded/TB1qimQIpXXXXXbXFXXSutbFXXX.jpg"; 我们如下编写代码: function getBase64Image(img) { var canvas = document.create

javascript iframe相关操作

1. 获得iframe的window对象 iframeElement.contentWindow 2. 获得iframe的document对象 存在跨域访问限制. chrome:iframeElement.contentDocument firefox:iframeElement.contentDocument ie:element.contentWindow.document 备注:ie没有iframeElement.contentDocument属性. var getIframeDocume