面文章有制作水晶魔方,這次我們升級一下它的功能,通過鼠標控制魔方旋轉。
大家先看效果
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小時內與您取得聯系。