banner 跟随鼠标呈现视差效果
参考 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 跟随鼠标呈现视差效果的更多相关文章
- hover时显示可跟随鼠标移动的浮动框,运用函数节流与去抖进行优化
在很多笔试面试题中总能看到js函数去抖和函数节流,看过很多关于这两者的讨论,最近终于在一个需求中使用了函数去抖(debounce)和函数节流(throttle). 需要完成的效果是,鼠标在表格的单元格 ...
- Ant Design -- 图片可拖拽效果,图片跟随鼠标移动
Ant Design 图片可拖拽效果,图片跟随鼠标移动,需计算鼠标在图片中与图片左上角的X轴的距离和鼠标在图片中与图片左上角的Y轴的距离. constructor(props) { super(pro ...
- html5跟随鼠标炫酷网站引导页动画特效
html5跟随鼠标炫酷网站引导页动画特效一款非常不错的引导页,文字效果渐变,鼠标跟随出绚丽的条纹.html5炫酷网站引导页,鼠标跟随出特效. 体验效果:http://hovertree.com/tex ...
- 【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效
今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果.当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑 ...
- canvas实现跟随鼠标旋转的箭头
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...
- jQuery背景跟随鼠标移动的网页导航
首页 PSD模板 CSS模板 特效插件 源码下载 酷站欣赏 建站资源 建站教程 心境之旅 在线留言 设为首页 加入收藏 我要投稿 联系站长 Search 首页 PSD模板 CSS模板 特效插件 ...
- 基于Parallax设计HTML视差效果
年关将至,给大家拜年. 最近时间充裕了一点,给大家介绍一个比较有意思的控件:Parallax.它可以用来实现鼠标移动时,页面上的元素也做偏移的视差效果.在一些有表现层次,布局空旷的页面上,用来做Hea ...
- css中的视距perspective和视差效果
概述 之前觉得2个效果很叼,一个是3D翻转效果,另一个是视差效果.今天好好的研究一下,把心得记录下来,供以后开发时参考,相信对其他人也有用. 3D翻转 3D翻转效果其实非常简单,其实就是perspec ...
随机推荐
- chrome中workspace配置达到同步修改本地文件的作用
在前端开发中,我们经常需要在浏览器中进行调试,特别是一些样式的修改,如果你还是先在浏览器elements中调试好在复制到本地文件,那就真的out了. chrome浏览器的workspace功能完全可以 ...
- SQL Server 2000中的并行处理和执行计划中的位图运算符
SQL Server 2000中的并行处理和执行计划中的位图运算符 摘抄自:SQLServer 2000并行处理和位图简介 刘志斌 并行查询介绍Degree of Parallelism(并行度) 一 ...
- Java 如何启用 ARM 虚拟机诊断
现象描述 如何通过 Java 语言实现在创建 ARM 虚拟机时开启诊断,并配置相关指标. 实现思路 调研最高版本的 JAVA SDK(1.1.0)源码发现,SDK 层面并未提供任启动诊断和配置诊断 ...
- orcl 如何快速删除表中百万或千万数据
orcl 数据库表中数据达到上千万时,已经变的特别慢了,所以时不时需要清掉一部分数据. bqh8表中目前有10000000条数据,需要保留19条数据,其余全部清除掉. 以下为个人方法: 1.首先把需要 ...
- Linux 辅助命令
0. 说明 记录在 Linux 使用过程中的一些有帮助的命令 1. 命令集合 [1.1 错误输出重定向] # 将错误信息重定向到 /dev/null source /xxx >/dev/null ...
- 【转】Java学习---线程间的通信
[原文]https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要 ...
- django版本切换以及更改url(pycharm)
Django版本切换:https://blog.csdn.net/weixin_42305814/article/details/80742090 因为是从2版本更改到1版本,所以里面一些东西需要变动 ...
- SDN2017 第四次作业
1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控制器 ht ...
- pycharm2017自建注册服务器
root运行: wget http://home.ustc.edu.cn/~mmmwhy/jetbrain.sh && sh ./jetbrain.sh 注意:需要安装screen软件 ...
- WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler
插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...