电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

JS+CSS實現(xiàn)超漂亮的動態(tài)翻書效果(思路詳解)

瀏覽:120日期:2022-06-10 10:30:34
目錄
  • 前言
  • 思路準備
  • 正文
  • 一、CSS實現(xiàn)
    • 1、搭建基本框架
    • 2、編寫CSS
  • 二、JS實現(xiàn)
    • 總結(jié)

      前言

      本文將帶大家來實現(xiàn)一個非常有趣的案例——打開書本效果。我們平常沖浪時是不是看過一些學(xué)校高級的錄取通知書,翻開通知書就能看見里面的內(nèi)容,呈現(xiàn)出逼真的3D效果!

      先來看效果圖:

      思路準備

      • 把這本書看成是2個容器組成——左半本書和右半本書,左半本書有外表面和內(nèi)表面,右半本書也有自己的內(nèi)表面和外表面,相當(dāng)于兩個小矩形。
      • 當(dāng)鼠標點擊書本向左移動時實現(xiàn)翻開效果,也就是只有左半本書可以翻動——繞著y軸旋轉(zhuǎn)。
      • 同時右半本書的卡片會豎起來,陰影也會隨之傾斜,整本書也會旋轉(zhuǎn)一定角度。

      正文

      一、CSS實現(xiàn)

      1、搭建基本框架

      首先是一本書,用class="book"的容器裝全部,里面分右半本書和左半本書——分別用class="back-cover"class="front-cover"的div容器表示。右半本書分內(nèi)殼和外殼——class="page front"class="page back",同理左半本書也分內(nèi)殼和外殼,也分別用相同類名。右半本書中放卡片和陰影,分別用class="shadow"、class="card"的div裝。而左半本書內(nèi)殼放一些文字,為了方便,給一些盒子加上公共類名。具體如下:

      <div><!-- 右半本 --><div>    <div></div>    <div><div></div><div></div>    </div></div><!-- 左半本 --><div>    <div><p>Solutions to over 1000 popular algorithm problems. All problems are from leetcode.com. Solutions include: - Problem statement - Python code with comments - Description of solution s    trategy - Time and space complexity Does not require internet connection.     Forward solutions by email. Please let me have your comments, correctio…</p>    </div>    <div></div></div>    </div>

      2、編寫CSS

      1)設(shè)置背景顏色,實現(xiàn)漸變效果。

      body {  height: 100%;  font: 100%/1.25 Arial, Helvetica, sans-serif;//字體類型  color: #fff;  perspective: 1000px; //必不可少!  background: #444;  background-image: linear-gradient(to bottom, #444, #999);}

      tips: perspective——定義了觀察者與 z=0 平面的距離,使具有三維位置變換的元素產(chǎn)生透視效果,值越大看到的東西越小,不設(shè)置看不出translateZ軸移動的近大遠小的感覺。perspective-origin——相當(dāng)于人的眼睛看哪里,默認是父元素中間地方。這兩個屬性都是設(shè)置在父元素身上。

      2)設(shè)置最外層容器book的樣式:寬高設(shè)置具體值并使它們在屏幕中間顯示——主要利用定位position:absolute實現(xiàn),top、left的值都為50%,再讓它們的左外邊距和上外邊距為自身寬高的負一半可以實現(xiàn)垂直居中顯示。

      .book {  width: 300px;  height: 300px;  position: absolute;  top: 50%;  left: 50%;  margin-top: -150px;  margin-left: -150px;}

      3)設(shè)置左半本書和右半本書里面的頁面的寬高——和書一樣大小,并利用定位——脫離文檔流,讓這些頁面在同一個位置,同時設(shè)置內(nèi)殼背景色為紅色,外殼為白色(方便放背景圖),讓左半本書繞著Y軸旋轉(zhuǎn)。同時設(shè)置3D立體效果

      .book .page {  width: 300px;  height: 300px;  padding: 1em;  position: absolute;  left: 0;  top: 0;  text-indent: 2em;}.book .front {  background-color: #d93e2b;}.book .back {  background-color: #fff;}.book .front-cover {  cursor: move; //鼠標放上去呈十字架形狀  transform-origin: 0 50%;  //transform:rotateY(-160deg) //可以利用這個看看旋轉(zhuǎn)的效果}.p3d {  transform-style: preserve-3d;}

      4)設(shè)置左半本書外層的封面以及右半書的外殼向Z軸平移(解決書的外層布局)

      .book .front-cover .back {  background-image: url("https://preview.qiantucdn.com/58pic/35/01/38/55A58PICaUy8sV83Dd78m_PIC2018.jpg%21w1024_new_3072");  background-repeat: no-repeat;  background-size: cover;  transform: translateZ(3px);}.book .back-cover .back {  transform: translateZ(-3px);}

      5)此時你會發(fā)現(xiàn)里面的文字反了,解決辦法是讓那頁反著的頁面旋轉(zhuǎn)180度就能正常了。到此為止左半本就完成了!

      .book .flip {  transform: rotateY(180deg);}

      6)設(shè)置右半本書的豎起來的卡片和倒影的位置、大小、顏色,起初兩者重疊。

      .book .shadow,.book .card {  width: 196px;  height: 132px;  position: absolute;  top: 60px;  left: 60px;  transform-origin: 0 100%; //設(shè)置旋轉(zhuǎn)起點}.book .card {  background: url("https://preview.qiantucdn.com/58pic/35/01/38/55A58PICaUy8sV83Dd78m_PIC2018.jpg%21w1024_new_3072");  background-size: cover;}.book .shadow {  background-color: rgba(0,0,0,0.5);}

      二、JS實現(xiàn)

      1)引入js文件到html中

      <script src="./index.js"></script>

      2)獲取到需要的元素。先拿到整本書,再拿到左半本書、卡片、陰影.

      let book=document.querySelector(".book"),    leftPage=document.querySelector(".front-cover"),    card=document.querySelector(".card"),    shadow=document.querySelector(".shadow")

      3)鼠標點擊到前半本書移動時開始觸發(fā)監(jiān)聽事件,可以再window身上設(shè)置

      window.onmousemove = function(event){}

      4)用一個變量表示鼠標的狀態(tài)是點擊、移動還是松開,類似于一個開關(guān)變量。默認是松開狀態(tài)。

      let hold=false//鼠標是按住的狀態(tài)leftPage.onmousedown=function(){  hold=true}window.addEventListener("mouseup",function(){  //鼠標不一定在page身上松開可能在其他地方松開,所以在window身上設(shè)置監(jiān)聽事件  hold=false})

      5)設(shè)置移動事件。監(jiān)聽此時鼠標按下去的那一刻點的X坐標以及移動中的X軸上的變化,從而設(shè)置一個合理的值,讓它繞Y軸旋轉(zhuǎn)。讓書、前半本書、卡片、陰影都能旋轉(zhuǎn)移動角度。

      window.onmousemove = function(event){  if(hold){    console.log(event.pageX);    var angle= clamp((window.innerWidth/2 - event.pageX + 300)/300* -90,-180,0) //300為書的寬度   //該angle公式中的值不固定,可以設(shè)置其他    // leftPage.style.transform="rotate("+angle+"deg)"    leftPage.style.transform=`rotateY(${angle}deg)`    card.style.transform=`rotateX(${angle/2}deg)`    shadow.style.transform=`skewX(${angle/10}deg)`    book.style.transform=`rotateX(${60+angle/8}deg)`  }}

      tips:

      • clamp函數(shù)中——min:-180deg,max:0deg,中間值:(window.innerWidth/2 - event.pageX + 300)/300* -90。總之這樣設(shè)置是為了旋轉(zhuǎn)角度比較契合,你也可以設(shè)置其他值。該值是在-180~0之間
      • skewX():指定對象繞X軸斜切扭曲。
      • 這些旋轉(zhuǎn)的角度都可以設(shè)置其他值,不過得設(shè)置的比較符合。

      6)設(shè)置給定3個值中取中間值的函數(shù)

      let clamp=function(val,min,max) {      return Math.max(min,Math.min(val,max))    }

      到此為止,動態(tài)翻書效果案例結(jié)束啦!有沒有覺得一種恍然大悟的感覺!說不定以后會用上喲!

      總結(jié)

      到此這篇關(guān)于JS+CSS實現(xiàn)超漂亮的動態(tài)翻書效果的文章就介紹到這了,更多相關(guān)js動態(tài)翻書效果內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

      標簽: JavaScript
      主站蜘蛛池模板: 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 志高装潢官网-苏州老房旧房装修改造-二手房装修翻新 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 河南中专学校|职高|技校招生-河南中职中专网 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 长沙印刷厂-包装印刷-画册印刷厂家-湖南省日大彩色印务有限公司 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | 医养体检包_公卫随访箱_慢病随访包_家签随访包_随访一体机-济南易享医疗科技有限公司 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | RFID电子标签厂家-上海尼太普电子有限公司 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名| 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 |