面文章有制作水晶魔方,这次我们升级一下它的功能,通过鼠标控制魔方旋转。
大家先看效果
CSS3之3D魔方鼠标控制酷炫效果
这酷炫的效果,你怎么看?
这次效果,咱们需要用JS实现。主要是监听鼠标事件,计算鼠标滑动距离,改变魔方的rotateX、rotateY
CSS3之3D魔方鼠标控制酷炫效果
JS有哪些鼠标事件呢?
1、click:单击事件。
2、dblclick:双击事件。
3、onmousedown:鼠标按下时触发事件,不管按住左键/右键还是滑轮都可以
4、onmousemove:鼠标移动实时触发事件
5、onmouseup:鼠标松开时触发事件
6、mousemove:鼠标移动事件。
7、mouseover:移入事件。
8、mouseout:移出事件。
9、mouseenter:移入事件。
10、mouseleave:移出事件。
11、contextmenu:右键事件。
那需要监听哪些事件呢?了解了他们的作用,我们就知道如何处理了。
鼠标按下时,记录鼠标当前所处位置,移动时又可以获取实时位置,用移动时获取的实时位置减去鼠标按下时的位置,就可以得到鼠标移动的相对位置。鼠标松开,可以结束计算。
CSS3之3D魔方鼠标控制酷炫效果
下面看看具体代码实现
这里用到了Jquery,大家自行下载使用
// 角度初始化
var RotateY = 0;
var RotateX = 0;
// 用个变量来拦截onmousemove,
var flag = false;
// 起点位置
var old_x = 0;
var old_y = 0;
document.onmousedown = function (e) {
flag = true;
// 按下鼠标时,记录起点位置
old_x = e.pageX;
old_y = e.pageY;
}
document.onmousemove = function (e) {
// 必须是按下后移动才有效果
if (flag) {
/**
* 新位置减去老位置
* 得到鼠标移动的X/Y距离
*/
var _x = e.pageX - old_x;
var _y = e.pageY - old_y;
/**
* 除以70得到需要旋转的角度
* 除数越大,鼠标移动后旋转的角度越小,
* 相反,除数是1,鼠标轻轻拖动,也会旋转的非常厉害
*/
RotateY += _x / 70;
RotateX += -(_y / 70);
/**
* 添加transform,盒子进行3D旋转
*/
$('.box').css({
transition: 'linear',
transform: 'rotateX(' + RotateX + 'deg) rotateY(' + RotateY + 'deg)'
});
}
};
document.onmouseup = function () {
flag = false;
// 鼠标抬起时结束
};
这样就可以实现魔方跟随鼠标移动旋转了,但是大家可以看到上方的示例图,有一个展开和收起的效果,是如何实现的呢?
之前咱们的魔方图是这样的
CSS3之3D魔方鼠标控制酷炫效果
现在,画出2个魔方,一个小一点,使小的魔方刚好在大魔方中心位置
<div class="content">
<div class="box">
<!-- 外层魔方 -->
<div class="out-front">前</div>
<div class="out-back">后</div>
<div class="out-left">左</div>
<div class="out-right">右</div>
<div class="out-top">上</div>
<div class="out-bottom">下</div>
<!-- 内层魔方 -->
<span class="in-front"></span>
<span class="in-back"></span>
<span class="in-left"></span>
<span class="in-right"></span>
<span class="in-top"></span>
<span class="in-bottom"></span>
</div>
</div>
按照之前章节的样式,进行调节。使小的魔方刚好在大魔方中心位置。
CSS3之3D魔方鼠标控制酷炫效果
样式如下:
.content {
margin-top: 200px;
perspective: 1000px;
/* 视距 */
}
.box {
width: 200px;
height: 200px;
position: relative;
color: #fffdf5;
font-size: 36px;
font-weight: bold;
text-align: center;
line-height: 200px;
transform-style: preserve-3d;
/* 默认 2D */
transition: transform 1s;
/*transform动画效果*/
/*不让鼠标选中文字*/
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.box>div {
width: 200px;
height: 200px;
border: 1px solid #FF2869;
position: absolute;
background-color: #333;
opacity: 0.5;
transition: transform 0.4s;
/*transform动画效果*/
}
.box .out-front {
transform: translateZ(100px);
background: url(./b1.jpg);
background-size: cover;
}
.box .out-back {
transform: translateZ(-100px) rotateY(180deg);
background: url(./b2.jpg);
background-size: cover;
}
.box .out-left {
transform: translateX(-100px) rotateY(-90deg);
background: url(./b3.jpg);
background-size: cover;
}
.box .out-right {
transform: translateX(100px) rotateY(90deg);
background: url(./b4.jpg);
background-size: cover;
}
.box .out-top {
transform: translateY(-100px) rotateX(90deg);
background: url(./b5.jpg);
background-size: cover;
}
.box .out-bottom {
transform: translateY(100px) rotateX(-90deg);
background: url(./b6.jpg);
background-size: cover;
}
.box>span {
display: block;
width: 100px;
height: 100px;
border: 1px solid #FF2869;
position: absolute;
top: 50px;
left: 50px;
}
.box .in-front {
transform: translateZ(50px);
background: url(./b1.jpg);
background-size: cover;
}
.box .in-back {
transform: translateZ(-50px) rotateY(180deg);
background: url(./b2.jpg);
background-size: cover;
}
.box .in-left {
transform: translateX(-50px) rotateY(-90deg);
background: url(./b3.jpg);
background-size: cover;
}
.box .in-right {
transform: translateX(50px) rotateY(90deg);
background: url(./b4.jpg);
background-size: cover;
}
.box .in-top {
transform: translateY(-50px) rotateX(90deg);
background: url(./b5.jpg);
background-size: cover;
}
.box .in-bottom {
transform: translateY(50px) rotateX(-90deg);
background: url(./b6.jpg);
background-size: cover;
}
CSS3之3D魔方鼠标控制酷炫效果
然后我们通过JS控制展开和收起效果
var clickNum = 1; //点击次数
$('.box').children().click(function () {
// 如果点击次数是奇数就展开,偶数就收起
if (clickNum % 2 == 0) {
// 收起
$('.out-front').css({
transform: 'translateZ(100px)'
});
$('.out-back').css({
transform: 'translateZ(-100px) rotateY(180deg)'
});
$('.out-left').css({
transform: 'translateX(-100px) rotateY(-90deg)'
});
$('.out-right').css({
transform: 'translateX(100px) rotateY(90deg)'
});
$('.out-top').css({
transform: 'translateY(-100px) rotateX(90deg)'
});
$('.out-bottom').css({
transform: 'translateY(100px) rotateX(-90deg)'
});
} else {
// 展开
$('.out-front').css({
transform: 'translateZ(200px)'
});
$('.out-back').css({
transform: 'translateZ(-200px) rotateY(180deg)'
});
$('.out-left').css({
transform: 'translateX(-200px) rotateY(-90deg)'
});
$('.out-right').css({
transform: 'translateX(200px) rotateY(90deg)'
});
$('.out-top').css({
transform: 'translateY(-200px) rotateX(90deg)'
});
$('.out-bottom').css({
transform: 'translateY(200px) rotateX(-90deg)'
});
}
clickNum++;
});
// box 的所有子元素添加鼠标手势样式
$('.box').children().mouseenter(function () {
$(this).css({ cursor: 'pointer' });
});
OK,这样我们的 CSS3 3D魔方鼠标控制酷炫效果就实现了。
大家学到了什么?JS鼠标事件都了解了吧?CSS3 3D场景都学会了吗?
关注我,学习更多前端知识,但不止于前端哦!
小伙伴们,有问题可以评论区留言哦,欢迎大家点评。
谢谢大家一直以来的支持。
易拖拽
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {width:200px; height:200px; background:red; position:absolute;}
</style>
<script>
window.onload=function ()
{
var oDiv=document.getElementById('div1');
var disX=0;
var disY=0;
oDiv.onmousedown=function (ev)
{
var oEvent=ev||event;
disX=oEvent.clientX-oDiv.offsetLeft; //拖拽距离
disY=oEvent.clientY-oDiv.offsetTop; //拖拽距离
oDiv.onmousemove=function (ev)
{
var oEvent=ev||event;
oDiv.style.left=oEvent.clientX-disX+'px';
oDiv.style.top=oEvent.clientY-disY+'px';
};
oDiv.onmouseup=function ()
{
oDiv.onmousemove=null;
oDiv.onmouseup=null;
};
};
};
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
程序问题:鼠标拖拽过快,鼠标指针与拖拽div对象脱离
解决方法:直接给document加事件(因为div对象范围太小,鼠标移动就与拖拽div对象脱离)
将oDiv改成document对象
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {width:200px; height:200px; background:red; position:absolute;}
</style>
<script>
window.onload=function ()
{
var oDiv=document.getElementById('div1');
var disX=0;
var disY=0;
oDiv.onmousedown=function (ev)
{
var oEvent=ev||event;
disX=oEvent.clientX-oDiv.offsetLeft;
disY=oEvent.clientY-oDiv.offsetTop;
document.onmousemove=function (ev)
{
var oEvent=ev||event;
oDiv.style.left=oEvent.clientX-disX+'px';
oDiv.style.top=oEvent.clientY-disY+'px';
};
document.onmouseup=function ()
{
document.onmousemove=null;
document.onmouseup=null;
};
};
};
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
程序问题: FF下,空Div拖拽Bug(残影)
解决方法: 阻止默认事件
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
#div1 {width:200px; height:200px; background:red; position:absolute;}
</style>
<script>
window.onload=function ()
{
var oDiv=document.getElementById('div1');
var disX=0;
var disY=0;
oDiv.onmousedown=function (ev)
{
var oEvent=ev||event;
disX=oEvent.clientX-oDiv.offsetLeft;
disY=oEvent.clientY-oDiv.offsetTop;
document.onmousemove=function (ev)
{
var oEvent=ev||event;
oDiv.style.left=oEvent.clientX-disX+'px';
oDiv.style.top=oEvent.clientY-disY+'px';
};
document.onmouseup=function ()
{
document.onmousemove=null;
document.onmouseup=null;
};
return false; //阻止默认事件(拖动残影)
};
};
</script>
</head>
<body>
<div id="div1"></div>
</body>
</html>
防止拖出页面
然大多数时候,键盘党的电脑高手们都会娴熟地运用各种快捷键来提高各种操作的效率,这种方式固然够快够精练,但却需要一定的记忆力和练习才能积累下来灵活运用。
而除快捷键以外,我们手上的「鼠标」其实也能变成另一个强大好用的效率加·速·器!MouseInc 是一款小巧绿色免费的系统全局鼠标手势软件,它能为你自定义一些鼠标手势来完成各种常用频繁的软件操作,比起快捷键也更容易上手,妥妥的装机必备辅助工具……
MouseInc 是一款 Windows 上小巧好用且免费绿色的鼠标手势软件 / 鼠标增强辅助工具。类似于 WGestures,可以帮你将鼠标打造成实用高效的操作利器,仅用鼠标就能完成很多复杂的功能和动作,让你使用电脑更加方便,更有效率。
那么什么是「鼠标手势」呢?其实就是按住鼠标右键不放,然后在屏幕上画出一个特定的手势线条,当手放开时,鼠标手势软件会识别出用户所画的手势图案的不同,来执行一组预定的动作,这样就能通过鼠标来做出类似键盘按下“快捷键”的作用,比如划个 L 线来关闭当前窗口。
MouseInc 提供了很多不同的动作和功能供你设置,而且除了鼠标手势以外,还提供了很多额外的辅助功能,比如截图、文字识别、创建自定义全局热键、复制增强、搜索增强等多种实用功能。
双击 MouseInc.exe 启动软件之后,可以在右下角系统托盘图标里找到它,右键选择“打开设置”即可调出设置界面。如首次启动时软件界面为英文,可以点击右上角的“Lang”将语言修改为“中文简体”即可。
MouseInc 的鼠标手势能做点什么?
通过 MouseInc 的自定义鼠标手势,我们可以做出很多「动作」,比如:复制粘贴、关闭窗口、最大最小化窗口、快速截图、搜索选中文字、OCR 识别文字、打开文件夹、调整音量、调整显示器亮度等等,而且它还可以通过鼠标手势来「模拟按下快捷键」、「运行.exe / 批处理」等功能,可以组合起来做出很多不同的功能。
MouseInc 还支持复合动作,比如选中一个网址,画 P 直接打开 ping 命令。选中文本以后,画 S 直接打开浏览器搜索选中的文字等。
更多的用途和功能就下载回去细细把玩吧,MouseInc 也提供了比较详细的文档可以参考,后面也有演示的视频。
全局鼠标手势
以前比较流行的鼠标手势是在浏览器里作为插件出现的,作用范围也只限于浏览器内。而 MouseInc 则能「作用于系统全局」的,你可以将手势应用在任意软件上,包括浏览器,所以它可以代替浏览器里的各种鼠标手势插件了。
MouseInc 也可以设置程序黑名单,在部分应用或者游戏等里面,不会启用鼠标手势防止出现混乱情况。
MouseInc 是纯绿色的软件,软件体积仅 200 多 KB,无需安装,单文件无依赖,占用系统资源极低,可以便携运行,随便放在硬盘或 U 盘里的任何目录下都能运行,所有配置保存在同目录的 MouseInc.json 文件里。
作者也曾承诺过,MouseInc 将永久免费,而且无广告、不扫描硬盘、不上传任何隐私。所以 MouseInc 还是很良心的,值得一试。
话说回来,在大部分使用电脑 (无需频繁打字) 的时间里,很多人都像我一样「单手使用鼠标」操作电脑。毫不夸张地说,这时鼠标手势的方便程度就会明显比键盘高了!你不必强迫自己用另一只手来按键盘,就能实施各种各样的动作,绝对是懒人必备的神器!习惯后真的会离不开。
你想想,上网时只需一只手握着鼠标就能:左右切换浏览器的标签页、关闭网页、刷新、前进后退、调整音量等等都能轻松搞定,这难道还要去按键盘吗?
当然了,鼠标手势与键盘热键两者其实并不冲突,我认为是互补关系的。比如在编程或者使用一些较为复杂的专业软件时,功能操作非常多,而鼠标手势是无法定义得太多的,加上双手频繁打字的话,按快键又比鼠标更快,所以快捷键的作用还是非常巨大且无法被完全取代的。
而在 MouseInc 里,除了定制鼠标手势外,它其实也提供了「自定义全局快捷键」的功能,如果你是键盘党,一样可以用它来增强你的热键。
所以,如果想要更好地提升工作效率以及电脑使用的便捷程度,我建议是全局鼠标手势 + 快捷键一起搭配使用才是王道。
MouseInc 除了鼠标手势的“本行”功能外,还提供了不少特色的其他辅助功能,大家可以多多摸索尝试:
总之, MouseInc 是一款不可多得的免费系统全局鼠标手势软件,也是追求高效工作的朋友必备的利器,如果你对鼠标手势的操作有兴趣,那么你不应该错过它!
在 WGestures、StrokIt 等同类鼠标手势工具停止更新后,MouseInc 作为一个新力军还一直保持着更新,加上免费、小巧、省资源以及纯绿色的特性,MouseInc 显得更加值得选择。比较可惜的是,目前它仅支持 Windows,使用 Mac 的同学只能眼馋了。原文:https://www.huajclub.com/3302.html
*请认真填写需求信息,我们会在24小时内与您取得联系。