成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

圖片遮罩翻轉(zhuǎn)

shaonbean / 590人閱讀

摘要:效果展示代碼。代碼以一個(gè)為單位,在其周圍生成個(gè)相同的遮罩。主要是的動畫不支持翻轉(zhuǎn),只能通過來做,需要以邊為單位翻轉(zhuǎn)。當(dāng)所有關(guān)聯(lián)起來的時(shí)時(shí)候,記錄上一個(gè)翻轉(zhuǎn)方向,達(dá)到連貫性不觸發(fā)獲得相對于中心點(diǎn)的,坐標(biāo)獲得斜率到之間的數(shù)

html代碼。

  
  • Css效果展示

css代碼。

.hf-reversal .hf-item .hf-cover.hf-hover{
    transform: rotate(0deg) !important;
    -webkit-transform: rotate(0deg) !important;
    -moz-transform: rotate(0deg) !important;
}

js代碼
以一個(gè)li為單位,在其周圍生成8個(gè)相同的遮罩。
主要是animation的css動畫不支持翻轉(zhuǎn),只能通過transfrom來做,需要以邊為單位翻轉(zhuǎn)。
當(dāng)所有l(wèi)i關(guān)聯(lián)起來的時(shí)時(shí)候,記錄上一個(gè)翻轉(zhuǎn)方向,達(dá)到連貫性

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不觸發(fā)
                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()

        // 獲得相對于中心點(diǎn)的 x,y坐標(biāo)
        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之間的數(shù)
        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);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94284.html

相關(guān)文章

  • 如何使用CSS和SVG剪切和遮罩技術(shù)

    摘要:通過結(jié)合使用和遮罩技術(shù),你將會擁有更多的可能性去使用網(wǎng)絡(luò)圖像。在圖像上應(yīng)用遮罩元素為了使用得到一種感覺,我們將在圖像上使用遮罩。瀏覽器支持在我們使用這種新的處理圖像的方法之前,注意到瀏覽器對剪切和遮罩的支持不一致是非常重要的。 本文轉(zhuǎn)載自:眾成翻譯譯者:hidoos鏈接:http://www.zcfy.cc/article/1100原文:https://getflywheel.com/...

    hover_lew 評論0 收藏0
  • 那是我夕陽下的奔跑,電商網(wǎng)站PC端詳情頁圖片放大效果實(shí)現(xiàn)

    摘要:使用鼠標(biāo)的坐標(biāo)值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標(biāo)離開的監(jiān)聽事件,當(dāng)鼠標(biāo)離開商品大圖時(shí)隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時(shí)商品大圖還是不能完全看清楚商品的細(xì)節(jié),該特效實(shí)現(xiàn)鼠標(biāo)懸停在商品大圖上時(shí),在商品大圖右側(cè)出現(xiàn)放大鏡效果并根據(jù)鼠標(biāo)的位置來改變右側(cè)大圖的顯示內(nèi)容,放大鏡中的內(nèi)容和鼠標(biāo)懸停位置的內(nèi)容相同。該特效的實(shí)現(xiàn)效果圖為:showImg(https://...

    ThreeWords 評論0 收藏0
  • 那是我夕陽下的奔跑,電商網(wǎng)站PC端詳情頁圖片放大效果實(shí)現(xiàn)

    摘要:使用鼠標(biāo)的坐標(biāo)值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標(biāo)離開的監(jiān)聽事件,當(dāng)鼠標(biāo)離開商品大圖時(shí)隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時(shí)商品大圖還是不能完全看清楚商品的細(xì)節(jié),該特效實(shí)現(xiàn)鼠標(biāo)懸停在商品大圖上時(shí),在商品大圖右側(cè)出現(xiàn)放大鏡效果并根據(jù)鼠標(biāo)的位置來改變右側(cè)大圖的顯示內(nèi)容,放大鏡中的內(nèi)容和鼠標(biāo)懸停位置的內(nèi)容相同。該特效的實(shí)現(xiàn)效果圖為:showImg(https://...

    szysky 評論0 收藏0
  • 那是我夕陽下的奔跑,電商網(wǎng)站PC端詳情頁圖片放大效果實(shí)現(xiàn)

    摘要:使用鼠標(biāo)的坐標(biāo)值減去遮罩層的一半的寬度,從而得到遮罩層顯示的位置。最后添加鼠標(biāo)離開的監(jiān)聽事件,當(dāng)鼠標(biāo)離開商品大圖時(shí)隱藏遮罩層以及放大鏡。 在詳情頁瀏覽時(shí)商品大圖還是不能完全看清楚商品的細(xì)節(jié),該特效實(shí)現(xiàn)鼠標(biāo)懸停在商品大圖上時(shí),在商品大圖右側(cè)出現(xiàn)放大鏡效果并根據(jù)鼠標(biāo)的位置來改變右側(cè)大圖的顯示內(nèi)容,放大鏡中的內(nèi)容和鼠標(biāo)懸停位置的內(nèi)容相同。該特效的實(shí)現(xiàn)效果圖為:showImg(https://...

    weknow619 評論0 收藏0
  • 透明背景情況下遮罩出不規(guī)則圖片

    摘要:使用透明蒙版等在四個(gè)角畫三角形來遮罩出六邊形我們來一一試驗(yàn)使用透明蒙版如果純色背景還可以,但是背景要求透明的,所以第一種看樣子不大可能了。 我們在處理圖片,比如用戶頭像的時(shí)候,通常上傳的都是矩形圖片 例如:showImg(https://segmentfault.com/img/bVkHOG); 有時(shí)候根據(jù)設(shè)計(jì)師的需求,會要求是圓形或者帶圓角,這時(shí)候我們通常使用css border-...

    rozbo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<