面文章有制作水晶魔方,这次我们升级一下它的功能,通过鼠标控制魔方旋转。
大家先看效果
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场景都学会了吗?
关注我,学习更多前端知识,但不止于前端哦!
小伙伴们,有问题可以评论区留言哦,欢迎大家点评。
谢谢大家一直以来的支持。
lt;script type="text/javascript">
/* 鼠标特效 */
var a_idx = 0; jQuery(document).ready(function($) { $("body").click(function(e) { var a = new Array("❤富强❤","❤民主❤","❤文明❤","❤和谐❤","❤自由❤","❤平等❤","❤公正❤","❤法治❤","❤爱国❤","❤敬业❤","❤诚信❤","❤友善❤"); var $i = $("<span></span>").text(a[a_idx]); a_idx = (a_idx + 1) % a.length; var x = e.pageX, y = e.pageY; $i.css({ "z-index": 999999999999999999999999999999999999999999999999999999999999999999999, "top": y - 20, "left": x, "position": "absolute", "font-weight": "bold", "color": "rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")" }); $("body").append($i); $i.animate({ "top": y - 180, "opacity": 0 }, 1500, function() { $i.remove(); }); }); });
</script>
司机如何选购和更换鼠标?
老司机的鼠标基本上都是坏微动,在更换鼠标之前,阿财的鼠标是罗技的M545,M950t和MX518,都犯了双击毛病。单这几个鼠标中M950t不是那么好拆换微动的,双层电路板让它很容易被拆报废了。MX518我已经成功翻新过一次,更换了已经融化粘手类肤质涂层的外壳,换成了全新G400S的外壳;并且更换了双击的微动,变成德国产樱桃DG2微动。
第二种情况下是换了显示器PPI提高了,罗技的M950t和MX518最高精度分别是1800dpi 和 2000dpi。即使把1600~2000DPI的鼠标调到最高精度,在4K和2.5K分辨率下面移动依然很慢,需要大力摆动鼠标才会有反应,这时候也比较推荐换鼠标了,2560x1440的分辨率鼠标精度建议设定为3200dpi,3840x2160p分辨率则建议将鼠标精度设定为4000~6400dpi。
可以更换微动的鼠标
考虑要一劳永逸的解决上面两个问题,我选择尝试钛度TSG550守望者鼠标。钛度这个品牌是昔日星际争霸职业玩家“人皇SKY”,卫冕WCG魔兽争霸项目的世界第一人李晓峰所全力打造的专业电竞装备品牌。京东购买链接 https://item.jd.com/4571301.html
开箱
守望者TSG550鼠标的彩盒包装,纸盒整体为黑红色双色。
包装盒正面为黑底鼠标实物图,钛度三角形的LOGO及鼠标型号信息,包装盒侧面是骚红配色加上“为电竟就而生”的品牌slogan(口号)。
包装盒背面则注明了鼠标参数和厂家信息,还有两行文字简明地阐述了守望者TSG550的特点:
左右微动可更换式设计;
原相3310光学引擎;
守望者TSG550配机全家福包括:鼠标本体,说明书,保修卡以及随机赠送两枚可替换的国产TTC黄金微动开关。
鼠标外观
钛度守望者TSG550是款USB有线鼠标,采用白色ABS塑料+黑色UV喷漆工艺的制造鼠标外壳,在鼠标掌心位置喷漆镂空出钛度Logo,鼠标内部装有RGB LED灯(默认为红色)通过白色ABS基底材质实现透光效果,同时在鼠标底部边缘及中键滚轮两侧也有RGB LED灯(默认为红色)装饰,通电后与钛度Logo一起呼吸闪烁。
鼠标外型接近于IE 3.0,适合手型小于18cm的使用者,采用了贴合人体工学设计,鼠标整体造型如同腰子一般从左向右侧内凹。
鼠标正前部份为左右键,中键位置为滚轮,支持按压和滚动两种操作方式,在鼠标最高处是DPI调整按键按下就依次增加DPI精度,直到最高级别然后跳回最低DPI精度往复循环。
这是款右手鼠标,不支持左右手互换,鼠标左侧是右手大拇指位置对应的前进和后退两个按键,大拇指可以很方便按压。按压反馈清脆,回弹有力。但是这两个微动不支持更换。
鼠标最右侧无任何按键,很幸运的是也没有使用类肤质涂层设计,通体哑光的UV喷漆,这样比较适合我这种鼠标使用五六年的用户,因为类肤质橡胶涂层在3年后几乎都会毫无悬念的融化,变成一种黏糊糊的恶心物质。
鼠标底部四角各有一个带磁吸附功能同时又贴着特氟龙自润滑材料的铁质脚垫,底部中间是产品铭牌以及原相3310激光光学引擎,这款鼠标光学引擎的稳定性和兼容性都不错。
掰开可拆卸的磁吸式脚贴,可以自由更换磨损的鼠标脚贴,还有内六角螺丝孔位,用于彻底拆解整个鼠标。
可更换微动
鼠标左右键的微动开关应该是更容易损坏的部件。根据我的经验,使用大概2年(这点要吐槽一句,2年绝对用不到欧姆龙微动标称的2千万次的敲击寿命!但是它就是双击双击双击了)之后就会出现双击和画直线出现断线的情况。杯具是目前市面上大多鼠标的微动都是与鼠标光学引擎的PCB电路板一体,更换都需要电烙铁这样的专用工具处理。
而钛度守望者TSG550鼠标最大的最具特色的不需要工具就能动手更换微动,一张纸的说明书包括了鼠标按键说明,微动更换示意图及保修卡信息三合一。
微动开关的更换过程在简单易懂的说明书指导下一步步操作来,而且只要不是手残我相信一定是没有问题的。
第一步按照说明书提示,用向上掀的办法用巧劲,在从背壳底部向上适度用力推开,就能取下鼠标背盖了。
取下背壳后,可以看到下面图中标示着“PULL”的位置,用指甲推开两个卡扣使其松动,再将左右键盖整体向前推动取下。
左右键盖拆下后的效果如下图所示——
照片中每两个白色卡扣固定着一个微动开关,钛度TGS550守望者鼠标自带的微动开关型号为欧姆龙D2FC-F-7N(20M),理论上大约2千万次的敲击寿命。
掀开后的2片上盖,完整的组成了鼠标的整个上半部分外壳。
我这里用了3种微动开关,黄色的TTC微动,黑色黑点是德国产樱桃DG2,理论寿命5000万次,黑色白点是欧姆龙D2FC-F-7N(20M),理论寿命2000万次。
更换微动就简单了,只要左右拨开白色的卡扣,整个微动开关就会弹出一点,用手指就可以取出。安装时需要将微动开关那一侧朝着鼠标尾部对准孔位放入,将微动安装上去,将白色扣具重新固定好,更换时注意微动的三针脚时不要装反,一定是微动开关那一横条更贴近鼠标尾部安装。
微动固定好,更换完成后再依次装上鼠标左右键外壳,鼠标背盖即可正常使用。整个操作过程完全不需要工具,只需要徒手即可完成。
尝试不同的微动开关手感,黄色TTC微动偏软,更静音,黑色黑点是德国产樱桃DG2,手感偏硬,声音更加清脆,理论寿命5000万次,黑色白点是欧姆龙D2FC-F-7N(20M),手感适中,开关声音介于TTC和樱桃DG2之间,理论寿命2000万次。
体验
鼠标重量决定了鼠标移动体验,一般的说鼠标重量在95g比较合适。
超过110g的鼠标手感都比较重,移动费力,尤其是FPS游戏中,没有选手会愿意使用120g以上的鼠标打需要高速移动的FPS和RTS游戏。
守望者TSG550鼠标采用原相3310光学芯片,每秒可达1000次信息传输,可以达到5000DPI的最高分辨率。我通过简单测试表明鼠标没有经过直线矫正,也没有断线等微动接触不良的情况。
为了更好的设定钛度守望者TSG550鼠标,钛度提供了“电竞精灵”驱动软件。安装完成后即可自动识别当前连接的所有钛度产品,在软件中可以个性化设置我的电竞装备。
比如调节灯光颜色、DPI设置、数据回报率、宏按键映射等等。“电竞精灵”软件的UI界面跟其他鼠标外设一样,非常直观易懂,功能模块的逻辑也直接简单。
不过也很奇怪,不知道为何集成RGB LED的钛度鼠标居然默认只用了红色LED,在没有安装“电竞精灵”软件之前,入手很长一段时间之内,我一度以为这款鼠标是红色LED单色的。
总结
钛度TGS550鼠标解决了鼠标微动耐用性的需求痛点,有符合人体工程学的外观设计,支持RGB变色呼吸灯光效果。还有5000DPI的高精度来适应阿财的4K高分辨率显示器,实在是完美的鼠标更新换代选择。而且可更换微动的特点还可以适应更长一段时间,预计可以达到5年以上的畅爽使用。
作者:阿财
*请认真填写需求信息,我们会在24小时内与您取得联系。