参考 Element 官网,利用 js / jq 和 css3, 实现某图片随着鼠标移动呈现的视差效果。


<!DOCTYPE html>
<html> <head>
<title>banner 跟随鼠标呈现视差效果</title>
<meta charset="utf-8" />
<style>
* {
transition: all .3s;
} .perspective {
perspective: 800px;
} .preserve3d {
position: relative;
width: 500px;
height: 400px;
margin: 160px auto;
background: #4b5cce url("http://data.banyanbbt.org/static/newimg/top/right.png") center no-repeat;
background-size: 100% 100%;
border-radius: 20px;
transform-style: preserve-3d;
}
</style>
</head> <body>
<div class="perspective">
<div class="preserve3d">
</div>
</div> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script type="text/javascript"> /* 原生js实现 */ (function () {
var imgPX = 0;
var imgPY = 0;
var divWidth = 0;
var divHeight = 0;
var flag = false; // 记录鼠标是否按下 var preserve3d = document.querySelector(".preserve3d"); console.log(preserve3d.offsetLeft, preserve3d.offsetTop)
console.log(preserve3d.clientWidth, preserve3d.clientHeight) preserve3d.addEventListener("mouseenter", function (e) {
flag = true;
var evt = e || window.event;
imgPX = preserve3d.offsetLeft;
imgPY = preserve3d.offsetTop;
divWidth = preserve3d.clientWidth;
divHeight = preserve3d.clientHeight; document.addEventListener("mousemove", function (e) {
if (flag) {
var evt = e || window.event;
var mouseX = evt.clientX - imgPX;
var mouseY = evt.clientY - imgPY;
var X = mouseX - divWidth / 2;
var Y = divHeight / 2 - mouseY;
preserve3d.style.transform =
`rotateY(${ X / 20 }deg) rotateX(${ Y / 20 }deg)`
}
}); document.addEventListener("mouseout", function () {
flag = false;
preserve3d.style.transform = `rotateY(${ 0 }deg) rotateX(${ 0 }deg)`
document.removeEventListener("mouseout", function () {
flag = false;
});
}) });
})(); /* jq 实现 */ // (function () {
// var imgPX = 0;
// var imgPY = 0;
// var divWidth = 0;
// var divHeight = 0; // $('.preserve3d').on('mouseenter', function () {
// imgPX = $(this).offset().left;
// imgPY = $(this).offset().top;
// divWidth = $(this).outerWidth();
// divHeight = $(this).outerHeight(); // console.log($(this).offset().left, $(this).offset().top) // }).on('mousemove', function (event) {
// var mouseX = event.pageX - imgPX;
// var mouseY = event.pageY - imgPY;
// var X = mouseX - divWidth / 2;
// var Y = divHeight / 2 - mouseY;
// $(this).css({
// "transform": "rotateY(" + X / 20 + "deg) " + "rotateX(" + Y / 20 + "deg) "
// });
// }).on('mouseleave', function () {
// $(this).css({
// "transform": "rotateY(0deg) rotateX(0deg)"
// })
// })
// })();
</script>
</body> </html>

banner 跟随鼠标呈现视差效果的更多相关文章

  1. hover时显示可跟随鼠标移动的浮动框,运用函数节流与去抖进行优化

    在很多笔试面试题中总能看到js函数去抖和函数节流,看过很多关于这两者的讨论,最近终于在一个需求中使用了函数去抖(debounce)和函数节流(throttle). 需要完成的效果是,鼠标在表格的单元格 ...

  2. Ant Design -- 图片可拖拽效果,图片跟随鼠标移动

    Ant Design 图片可拖拽效果,图片跟随鼠标移动,需计算鼠标在图片中与图片左上角的X轴的距离和鼠标在图片中与图片左上角的Y轴的距离. constructor(props) { super(pro ...

  3. html5跟随鼠标炫酷网站引导页动画特效

    html5跟随鼠标炫酷网站引导页动画特效一款非常不错的引导页,文字效果渐变,鼠标跟随出绚丽的条纹.html5炫酷网站引导页,鼠标跟随出特效. 体验效果:http://hovertree.com/tex ...

  4. 【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效

    今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果.当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑 ...

  5. canvas实现跟随鼠标旋转的箭头

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...

  6. Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现

    Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...

  7. jQuery背景跟随鼠标移动的网页导航

    首页 PSD模板 CSS模板 特效插件 源码下载 酷站欣赏 建站资源 建站教程 心境之旅 在线留言 设为首页 加入收藏 我要投稿 联系站长 Search     首页 PSD模板 CSS模板 特效插件 ...

  8. 基于Parallax设计HTML视差效果

    年关将至,给大家拜年. 最近时间充裕了一点,给大家介绍一个比较有意思的控件:Parallax.它可以用来实现鼠标移动时,页面上的元素也做偏移的视差效果.在一些有表现层次,布局空旷的页面上,用来做Hea ...

  9. css中的视距perspective和视差效果

    概述 之前觉得2个效果很叼,一个是3D翻转效果,另一个是视差效果.今天好好的研究一下,把心得记录下来,供以后开发时参考,相信对其他人也有用. 3D翻转 3D翻转效果其实非常简单,其实就是perspec ...

随机推荐

  1. chrome中workspace配置达到同步修改本地文件的作用

    在前端开发中,我们经常需要在浏览器中进行调试,特别是一些样式的修改,如果你还是先在浏览器elements中调试好在复制到本地文件,那就真的out了. chrome浏览器的workspace功能完全可以 ...

  2. SQL Server 2000中的并行处理和执行计划中的位图运算符

    SQL Server 2000中的并行处理和执行计划中的位图运算符 摘抄自:SQLServer 2000并行处理和位图简介 刘志斌 并行查询介绍Degree of Parallelism(并行度) 一 ...

  3. Java 如何启用 ARM 虚拟机诊断

    现象描述 如何通过 Java 语言实现在创建 ARM 虚拟机时开启诊断,并配置相关指标.   实现思路 调研最高版本的 JAVA SDK(1.1.0)源码发现,SDK 层面并未提供任启动诊断和配置诊断 ...

  4. orcl 如何快速删除表中百万或千万数据

    orcl 数据库表中数据达到上千万时,已经变的特别慢了,所以时不时需要清掉一部分数据. bqh8表中目前有10000000条数据,需要保留19条数据,其余全部清除掉. 以下为个人方法: 1.首先把需要 ...

  5. Linux 辅助命令

    0. 说明 记录在 Linux 使用过程中的一些有帮助的命令 1. 命令集合 [1.1 错误输出重定向] # 将错误信息重定向到 /dev/null source /xxx >/dev/null ...

  6. 【转】Java学习---线程间的通信

    [原文]https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要 ...

  7. django版本切换以及更改url(pycharm)

    Django版本切换:https://blog.csdn.net/weixin_42305814/article/details/80742090 因为是从2版本更改到1版本,所以里面一些东西需要变动 ...

  8. SDN2017 第四次作业

    1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控制器 ht ...

  9. pycharm2017自建注册服务器

    root运行: wget http://home.ustc.edu.cn/~mmmwhy/jetbrain.sh && sh ./jetbrain.sh 注意:需要安装screen软件 ...

  10. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...