js放大镜效果

本文介绍了如何使用JavaScript创建一个简单的放大镜效果,让用户体验到在网页上查看细节时的放大镜功能。
摘要由CSDN通过智能技术生成

放大镜

在这里插入图片描述

<style>
    *{padding: 0;margin: 0;}
    #box{
        margin: 50px auto;
        width: 800px;
        height: 400px;
        overflow: hidden;
        border: 5px solid rgb(228, 151, 36);
        position: relative;
    }
    #small{
        width: 500px;height: 400px;
        position: absolute;
    }
    #small img{
        width: 100%;height: 100%;
        display: block;
        position: absolute;
        left:0px;top:0px;
    }
    #small span.move{
        width: 100px;height: 100px;
        position: absolute;
        top:0;left:0;
        background-color: black;opacity: 0.3;
        display: none;
    }
    #big{
        width: 200px;height: 200px;
        float: left;
        position: absolute;
        border: 2px solid rgb(199, 3, 3);
        overflow: hidden;
         display: none; 
    }
    #big_img{
        position: absolute;
        left:0px;top:0px;
        width:1000px;
        height: 800px;
    }
    </style>
<body>
    <div id="box">
        <div id="small">
            <img src="./images/3.jpg" />
            <span class="move"></span>
        </div>
        <div id="big">
            <img src="./images/3.jpg" id="big_img" />
        </div>
    </div>  
</body>
<script>
    /* 
        鼠标移入 small 的 img 中,<span>滑块显示,且跟随鼠标的移动而移动
            big 中 只显示鼠标滑过的地方的局部图片  成放大效果
    */
    // 1. 获取 small 节点 给 small 添加鼠标移动事件    // getElementById
    var oSmall = document.getElementById("small");    //console.log(oSmall);
    // 5. 获取 move 节点   // querySelector
    var oMove = document.querySelector(".move");    //console.log(oMove);
    // 获取 box 节点
    var oBox = document.getElementById("box");
    var oBig = document.getElementById("big");
    var oBigImg = document.getElementById('big_img');
    // 2. 给 small 绑定鼠标移动事件
    oSmall.onmousemove = function(event){
        // 添加 event 事件 获取鼠标滑动时的位置
        // 对 event 事件 做兼容
        var e = event || window.event;
        // 4. 获取鼠标滑动时距离浏览器左边的 left 和距离顶部的 top 值   // .clientX    // .clientY
        var mouseX = e.clientX;   //console.log(mouseX); 
        var mouseY = e.clientY;   //console.log(mouseY);
        // 5. 鼠标在 small 的 img 中滑动 - 滑块<span>显示
        oMove.style.display = "block";
        // 6. 获取 滑块距离 small 左边left 和顶部 top的值 
        var moveLeft = mouseX-oBox.offsetLeft - oMove.offsetWidth/2;    
        var moveTop = mouseY -oBox.offsetTop - oMove.offsetHeight/2;
        // 限定 滑块的滑动范围
        //如果 moveLeft 小于零 则等于零 反之为 moveLeft
        moveLeft < 0 ? moveLeft = 0 : moveLeft = moveLeft;
        moveLeft > this.offsetWidth - oMove.offsetWidth ? moveLeft = this.offsetWidth - oMove.offsetWidth : moveLeft = moveLeft;
        //console.log(this.offsetWidth);
        moveTop < 0 ? moveTop = 0 : moveTop = moveTop;
        moveTop > this.offsetHeight - oMove.offsetHeight ? moveTop = this.offsetHeight - oMove.offsetHeight : moveTop = moveTop;
        //console.log(this.offsetHeight);
        // 赋值给 滑块的 left 和 top
        oMove.style.left=moveLeft+'px';
        oMove.style.top=moveTop+'px';
        //鼠标滑动 big 显示
        oBig.style.top = this.offsetTop + 'px';
        oBig.style.left = this.offsetLeft + this.offsetWidth + 'px';
        oBig.style.display = 'block';       
        var oBig_x = moveLeft/(this.offsetWidth-oMove.offsetWidth)*(oBig.offsetWidth-oBigImg.offsetWidth);
        var oBig_y = moveTop/(this.offsetHeight-oMove.offsetHeight)*(oBig.offsetHeight-oBigImg.offsetHeight);      
        oBigImg.style.top = oBig_y + 'px';
        oBigImg.style.left = oBig_x + 'px';
    }
    oSmall.onmouseout = function(){
        oMove.style.display = 'none';
        oBig.style.display = 'none';
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
three.js 中实现放大镜效果可以通过以下步骤: 1. 创建一个渲染器和场景。 2. 创建一个透视相机并设置其位置和朝向。 3. 加载模型并添加到场景中。 4. 创建一个平面几何体并将其作为放大镜的视图。 5. 将放大镜视图添加到场景中。 6. 创建一个 RenderTarget,并将其绑定到放大镜视图上。 7. 创建一个材质并将 RenderTarget 作为其贴图。 8. 创建一个圆形几何体并将其用作放大镜的外观。 9. 将材质应用于圆形几何体。 10. 将放大镜外观添加到场景中。 11. 创建一个鼠标事件监听器。 12. 在鼠标移动事件中更新放大镜视图的位置和渲染。 以下是示例代码: ```javascript //1.创建渲染器和场景 const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); const scene = new THREE.Scene(); //2.创建透视相机 const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000); camera.position.set(0, 0, 50); scene.add(camera); //3.加载模型 const loader = new THREE.GLTFLoader(); loader.load('model.gltf', function(gltf) { scene.add(gltf.scene); }); //4.创建平面几何体 const viewGeometry = new THREE.PlaneGeometry(10, 10); const viewMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff }); const viewMesh = new THREE.Mesh(viewGeometry, viewMaterial); viewMesh.position.set(20, 20, 0); scene.add(viewMesh); //5.将放大镜视图添加到场景中 const viewScene = new THREE.Scene(); viewScene.add(camera); //6.创建RenderTarget const renderTarget = new THREE.WebGLRenderTarget(256, 256); renderTarget.texture.magFilter = THREE.LinearFilter; renderTarget.texture.minFilter = THREE.LinearFilter; //7.创建材质 const material = new THREE.MeshBasicMaterial({ map: renderTarget.texture }); //8.创建圆形几何体 const radius = 5; const segments = 32; const circleGeometry = new THREE.CircleGeometry(radius, segments); const circleMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff }); const circleMesh = new THREE.Mesh(circleGeometry, material); circleMesh.position.set(-20, -20, 0); scene.add(circleMesh); //9.将材质应用于圆形几何体 circleMesh.material = material; //10.将放大镜外观添加到场景中 scene.add(circleMesh); //11.创建鼠标事件监听器 const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); function onMouseMove(event) { event.preventDefault(); //将鼠标位置转换为three.js坐标 mouse.x = (event.clientX / window.innerWidth) * 2 - 1; mouse.y = -(event.clientY / window.innerHeight) * 2 + 1; //更新放大镜视图的位置 raycaster.setFromCamera(mouse, camera); const intersects = raycaster.intersectObjects(scene.children); if (intersects.length > 0) { viewMesh.position.copy(intersects[0].point); viewMesh.lookAt(camera.position); } } window.addEventListener('mousemove', onMouseMove, false); //12.渲染场景 function render() { renderer.setRenderTarget(renderTarget); renderer.render(viewScene, camera); renderer.setRenderTarget(null); renderer.render(scene, camera); requestAnimationFrame(render); } render(); ``` 这段代码中的 `model.gltf` 是指需要加载的模型文件,你需要将其替换为你自己的模型文件路径。同时,你也可以根据自己的需要调整放大镜的大小、位置和样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值