热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

圖片遮罩翻轉

html代碼。

《圖片遮罩翻轉》

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代碼
以一個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 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);

推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • ForabuttonIhave3possibleclasses:state-normal,state-focusandstate-hover.Allhaveth ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • vue扫描二维码
    本地要用localhost。发布之后要用https的才可以看到。(你的设备也必须有摄像头)切记卡号 ... [详细]
  • 使用HTML创建弹出框以便用户输入信息
    在做项目的过程中,我们时常需要进行一些弹框操作,比如在后台管理时需要进行的一些增删改操作,这个时候我们需要使用到弹框,或者在 ... [详细]
  • css自适应字体样式?如果是一排文字,一个background‘red’;就搞定了。是多行的话,只有根据文字行高,用一张背景图横向重复。css样式自适应分辨率高度和宽度尽量使用百分 ... [详细]
  • packagecom.lihong.DDPush.pms;importcom.lihong.DDPush.mybatis.Parser;importorg.junit.Test;impor ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
author-avatar
小思绪
创造人生的可能
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有