摘要:效果展示代碼。代碼以一個為單位,在其周圍生成個相同的遮罩。主要是的動畫不支持翻轉,只能通過來做,需要以邊為單位翻轉。當所有關聯起來的時時候,記錄上一個翻轉方向,達到連貫性不觸發獲得相對于中心點的,坐標獲得斜率到之間的數
html代碼。
css代碼。
.hf-reversal .hf-item .hf-cover.hf-hover{ transform: rotate(0deg) !important; -webkit-transform: rotate(0deg) !important; -moz-transform: rotate(0deg) !important; }
js代碼
以一個li為單位,在其周圍生成8個相同的遮罩。
主要是animation的css動畫不支持翻轉,只能通過transfrom來做,需要以邊為單位翻轉。
當所有li關聯起來的時時候,記錄上一個翻轉方向,達到連貫性
var initImgCover = function(){ var directionObj = { "top-left":"rotate(-90deg)", "left-top":"rotate(90deg)", "top-right":"rotate(90deg)", "right-top":"rotate(-90deg)", "bottom-left":"rotate(90deg)", "left-bottom":"rotate(-90deg)", "bottom-right":"rotate(-90deg)", "right-bottom":"rotate(90deg)" }; function transFormByDirection(element,direction,isEnter){ var currentCoverName= element.attr("cover-name")||"",item = element.closest("li"),currentCover; function transFormCover(defaultName){ var name = null; var arr = ["top","right","bottom","left"]; for(var i=0;i< arr.length;i++){ if(element.hasClass(arr[i])){ name = direction +"-"+ arr[i]; break; } } if(!name || !directionObj[name]){ name = defaultName; } element.removeClass("top left right bottom").addClass(direction); if(isEnter){ currentCoverName = name; currentCover = item.find(".hf-clone."+currentCoverName); currentCover.addClass("hf-hover"); }else{ var cssText = item.find(".hf-clone."+name)[0].style.cssText; currentCover = item.find(".hf-clone."+currentCoverName); currentCover[0].style.cssText = cssText; currentCover.removeClass("hf-hover"); currentCoverName = name; } element.attr("cover-name",currentCoverName); } function getDefaultCoverName(defaultName,num){ var name = defaultName[0],coverName=""; if(isEnter){ var ul = item.closest("ul"),index = item.index() +num,prevItem,prevCoverName; if(index >=0 && index < 9 ){ prevItem = ul.children("li:eq("+index+")"); prevCoverName = prevItem.find(".hf-cover:not(.hf-clone)").attr("cover-name"); if(prevCoverName){ coverName = direction + "-"+ prevCoverName.split("-")[1]; } } }else{ coverName = direction + "-"+currentCoverName.split("-")[1]; } if(defaultName.indexOf(coverName)!= -1){ name = coverName; } return name; } switch (direction){ case "top": // -3 transFormCover( getDefaultCoverName(["top-right","top-left"],-3)); break; case "right": // +1 transFormCover(getDefaultCoverName(["right-bottom","right-top"],1)); break; case "bottom": // +3 transFormCover(getDefaultCoverName(["bottom-left","bottom-right"],3)); break; case "left": // -1 transFormCover(getDefaultCoverName(["left-top","left-bottom"],-1)); break; } } function initCover(element){ element.find(".hf-clone").remove(); var cover = element.find(".hf-cover:not(.hf-clone)"); $.each(directionObj,function(k,v){ var clone = cover.clone(); var obj = { "transform-origin":k.replace("-"," "), "transform":v, "display":"block" }; clone.removeAttr("cover-name").addClass("hf-clone").addClass(k).css(obj).appendTo(element); }); } $(".hf-reversal .hf-item").bind({ "pointerenter":function(e){ var chromePointerEvents = typeof PointerEvent === "function"; if (chromePointerEvents) { if (e.pointerId === undefined) { return; } // mouseleave不觸發 this.setPointerCapture(e.pointerId); } var item = $(this), cover = item.find(".hf-cover:not(.hf-clone)"); initCover(item); item.mDirection(e,function(direction){ transFormByDirection(cover,direction,true); }) }, "pointerleave":function(e){ var that = this,item = $(this),cover = item.find(".hf-cover:not(.hf-clone)"); $(this).mDirection(e,function(direction){ transFormByDirection(cover,direction,false); var chromePointerEvents = typeof PointerEvent === "function"; if (chromePointerEvents) { if (e.pointerId === undefined) { return; } that.releasePointerCapture(e.pointerId); } }) } }) } if (typeof jQuery === "undefined") { throw new Error("mDirection JavaScript requires jQuery") } +function ($) { "use strict"; var Direction = function(element){ this.$element = element; }; Direction.DEFAULTS = { }; Direction.prototype.init = function (enterObj,leaveObj) { var $this = this var $el = this.$element $el.addEventListener("mouseenter",function(e){ var directionNumber = $this.getDirectionNumber(e); var funArray = [enterObj.top,enterObj.right,enterObj.bottom,enterObj.left]; funArray[directionNumber]($el); },false); $el.addEventListener("mouseleave",function(e){ var directionNumber = self.main(e); var funArray = [leaveObj.top,leaveObj.right,leaveObj.bottom,leaveObj.left]; funArray[directionNumber]($el); },false); }; Direction.prototype.getDirectionNumber = function(e){ var $el = this.$element var width = $el.width() var height = $el.height() // 獲得相對于中心點的 x,y坐標 var x = (e.pageX - $el.offset().left-( width / 2 )) * (width >height ? (height / width ):1); var y = (e.pageY- $el.offset().top -( height / 2 )) * (height >width ? (width / height):1); // Math.atan2(y,x) 獲得斜率 -PI 到PI之間的數 var number = Math.round((((Math.atan2(y, x) * 180 / Math.PI) + 180) / 90) + 3) % 4; return number; } Direction.prototype.getDirection = function(e){ var directionNumber = this.getDirectionNumber(e); var direction = ""; switch (directionNumber) { case 0 : direction = "top"; break; case 1: direction = "right"; break; case 2: direction = "bottom"; break; case 3: direction = "left"; break; } return direction; } $.fn.mDirection = function(e,callback){ var $element = this; var mDirection = new Direction($element); if(callback){ callback.call($element,mDirection.getDirection(e)); }else{ return mDirection.getDirection(e); } }; $.fn.mDirection.Constructor = function(element,enterObj,leaveObj){ var $element = $(element); var mDirection = new Direction($element); mDirection.init(enterObj,leaveObj) } }(jQuery);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94284.html
摘要:通過結合使用和遮罩技術,你將會擁有更多的可能性去使用網絡圖像。在圖像上應用遮罩元素為了使用得到一種感覺,我們將在圖像上使用遮罩。瀏覽器支持在我們使用這種新的處理圖像的方法之前,注意到瀏覽器對剪切和遮罩的支持不一致是非常重要的。 本文轉載自:眾成翻譯譯者:hidoos鏈接:http://www.zcfy.cc/article/1100原文:https://getflywheel.com/...
摘要:使用鼠標的坐標值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標離開的監聽事件,當鼠標離開商品大圖時隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時商品大圖還是不能完全看清楚商品的細節,該特效實現鼠標懸停在商品大圖上時,在商品大圖右側出現放大鏡效果并根據鼠標的位置來改變右側大圖的顯示內容,放大鏡中的內容和鼠標懸停位置的內容相同。該特效的實現效果圖為:showImg(https://...
摘要:使用鼠標的坐標值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標離開的監聽事件,當鼠標離開商品大圖時隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時商品大圖還是不能完全看清楚商品的細節,該特效實現鼠標懸停在商品大圖上時,在商品大圖右側出現放大鏡效果并根據鼠標的位置來改變右側大圖的顯示內容,放大鏡中的內容和鼠標懸停位置的內容相同。該特效的實現效果圖為:showImg(https://...
摘要:使用鼠標的坐標值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標離開的監聽事件,當鼠標離開商品大圖時隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時商品大圖還是不能完全看清楚商品的細節,該特效實現鼠標懸停在商品大圖上時,在商品大圖右側出現放大鏡效果并根據鼠標的位置來改變右側大圖的顯示內容,放大鏡中的內容和鼠標懸停位置的內容相同。該特效的實現效果圖為:showImg(https://...
摘要:使用透明蒙版等在四個角畫三角形來遮罩出六邊形我們來一一試驗使用透明蒙版如果純色背景還可以,但是背景要求透明的,所以第一種看樣子不大可能了。 我們在處理圖片,比如用戶頭像的時候,通常上傳的都是矩形圖片 例如:showImg(https://segmentfault.com/img/bVkHOG); 有時候根據設計師的需求,會要求是圓形或者帶圓角,這時候我們通常使用css border-...
閱讀 6179·2021-11-22 15:32
閱讀 813·2021-11-11 16:54
閱讀 3157·2021-10-13 09:40
閱讀 2162·2021-09-03 10:35
閱讀 1824·2021-08-09 13:47
閱讀 1865·2019-08-30 15:55
閱讀 1933·2019-08-30 15:43
閱讀 2455·2019-08-29 17:06