js实现简单动画,多图动画,大位置到小位置

html部分

 <input type="button" id="btn1" value="点击我图片移动800px">
    <input type="button" id="btn2" value="点击我图片移动400px">

    <!-- 实现2个div竖着排列 -->
    <div id="pic"></div>
    <div id="pic2"></div>
    <div id="pic3"></div>

    <!-- 在写动画案例时,一定先在css样式中清空页面body的margin和 padding,因为带有margin的值,会影响后续的移动速度-->

js部分

 <script>
        //获取元素
        var btn1=document.getElementById('btn1');
        var btn2=document.getElementById('btn2');
        var pic=document.getElementById('pic');
        var pic2=document.getElementById('pic2');
        var pic3=document.getElementById('pic3');

        var target; //动画移动的目标位置
        var step;   //动画移动步长
        // var timerId=null;   //保证页面只有一个定时器//此处在后面多图动画代码中优化了,下面有优化原因
        var current;    //定义一个当前位置

        btn1.onclick=function(){
            animate(pic,800,10);   
            animate(pic2,800,10);  
            animate(pic3,800,10);         
        }
        btn2.onclick=function(){
            animate(pic,400,10);
            animate(pic2,400,10);  
            animate(pic3,400,10);  
        }

        //3、把图片移动的操作代码,封装,在点击按钮事件中,直接调用
        function animate(element,target,step) { 
            if(element.timerId){    //timerId已经存在则不需要在创建,并把当前的timerId停掉,4、多图动画时,每个pic都需要动起来,因此需要给每个pic怎加自己的定时器,所以增加自己的属性element.timerId
                clearInterval(element.timerId);
                element.timerId=null;
             }
             element.timerId=setInterval(function () {  
                current=element.offsetLeft;
                // element.style.left=current+step+'px';
                
                //5、当从400-800时候,没有动画,时直接跳转的,正常情况应该是,逐次递减步长step,即-10               
                if(current>target){
                     step = - Math.abs(step) ;  //避免负负得正,直接去绝对值,在加负号,最后获取的永远都是负
                }

                //判断图片到一定位置,停止
                //6、当图片最后停在目标值附近的时候,可以直接设置为目标值
                if(Math.abs(current-target)<Math.abs(step)) {
                    //停止计时器,记得写在计时器里面,否则没效果
                    clearInterval(element.timerId);
                    //避免大于800,重新设置为800px
                    element.style.left=target+'px';
                    //退出函数
                    return;
                }
                //pic移动               
                current+=step;
                element.style.left=current+'px';
            },30);

        }
    </script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现鼠标悬停在图片上时放大图片的效果,可以使用以下步骤: 1. 在 HTML 中插入一张图片,设置图片的宽度和高度,并将其放置在一个容器中。 2. 使用 CSS 设置容器的样式,将容器的宽度和高度设置为图片的一半,并将 overflow 属性设置为 hidden,这样当图片放大时,容器可以隐藏超出容器范围的部分。 3. 使用 JavaScript 监听鼠标移动事件,并获取鼠标的位置。 4. 根据鼠标的位置计算出图片应该放大的比例,可以使用以下公式:放大比例 = (鼠标距离容器左边缘的距离 / 容器宽度) * 2。 5. 使用 CSS 设置图片的样式,将图片的宽度和高度分别乘以放大比例,使图片放大。 6. 当鼠标离开图片时,将图片恢复原始大小。 下面是一个示例代码: HTML代码: ``` <div class="container"> <img src="image.jpg" width="400" height="300" /> </div> ``` CSS样式: ``` .container { width: 200px; height: 150px; overflow: hidden; } .container img { transition: all 0.3s ease-out; } .container:hover img { transform: scale(2); } ``` JavaScript代码: ``` var container = document.querySelector('.container'); var img = container.querySelector('img'); var containerWidth = container.offsetWidth; var containerHeight = container.offsetHeight; container.addEventListener('mousemove', function(e) { var mouseX = e.clientX - this.offsetLeft; var mouseY = e.clientY - this.offsetTop; var scaleX = mouseX / containerWidth * 2; var scaleY = mouseY / containerHeight * 2; img.style.transform = 'scale(' + scaleX + ',' + scaleY + ')'; }); container.addEventListener('mouseleave', function() { img.style.transform = 'scale(1)'; }); ``` 注意:这个示例只是一个简单实现,实际应用中可能需要处理更多的细节问题,比如图片的边界处理、动画效果等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值