<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          首頁

          怎么制作微信小程序的旋轉動畫?

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          微信小程序被給予的能量是無窮的,在小程序發展逐漸成熟的當下,小程序開發能實現的需求越來越完善。最近小程序中有一個圖片旋轉的需求,在微信小程序上是可以通過切換多張圖片達到旋轉的效果,但微信小程序自帶的API中帶有這么一個動畫組件,因此小程序制作旋轉動畫可以使用image+Animation來實現。

          首先在wxml中定義image

          注意其中的animation屬性,image就由它來實現動畫。

          而{{animation}}我們在js的data中定義

          data: {

          animation: \'\'

          },

          相關代碼

          var _animation;

          var _animationIndex

          const _ANIMATION_TIME = 500;

          pages {

          ...

          onShow: function () {

          _animation =wx.createAnimation({

          duration:_ANIMATION_TIME,

          timingFunction: \'linear\',//linear,ease,ease-in,ease-in-out,ease-out,step-start,step-end

          delay: 0,

          transformOrigin:\'50% 50% 0\'

          })

          },

          /**

          * 實現image旋轉動畫,每次旋轉 120*n度

          */

          rotateAni: function (n){

          _animation.rotate(120* (n)).step()

          this.setData({

          animation:_animation.export()

          })

          },

          /**

          * 開始旋轉

          */

          startAnimationInterval:function () {

          var that = this;

          that.rotateAni(++_loadImagePathIndex); // 進行一次旋轉

          _animationIntervalId =setInterval(function () {

          that.rotateAni(++_loadImagePathIndex);

          },  _ANIMATION_TIME); // 沒間隔_ANIMATION_TIME進行一次旋轉

          },

          /**

          * 停止旋轉

          */

          stopAnimationInterval:function () {

          if (_animationIntervalId> 0) {

          clearInterval(_animationIntervalId);

          _animationIntervalId= 0;

          }

          },

          }

          微信自帶的Animation可以實現一次動畫,然后可以通過setInterval來達到不斷旋轉的目的,在使用時,控制startAnimationInterval和stopAnimationInterval即可。


          微信小程序怎么制作旋轉動畫

          微信小程序視頻教程,盡在即速學院。


          在使用animation時,會發現有時候出現旋轉速度很快或者反向旋轉再正向旋轉的清空,這都是由于rotate的值設置有問題。

          1、rotate的值應該是上一次結束時的值,

          2、如果設置了全局變量,記得在oncreate時初始化,不然第二次打開同一頁面會有問題。

          注意事項:

          這里為什么不直接給_animation.rotate(120 * (n)).step()設置一個足夠大的值,原因有兩點:

          1、我們需要便利的控制開始和停止,

          2、animation在小程序進入后臺后,會持續運行,占用手機內存和cpu,而小程序依賴于微信,在iphone上會導致微信被終止運行

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          css布局——flex布局

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。
          任何一個容器都可以指定為 Flex 布局。
          .box{ display: flex;}
          行內元素也可以使用 Flex 布局。
          .box{ display: inline-flex;}
          Webkit 內核的瀏覽器display: -webkit-flex;
          設為 Flex 布局以后,子元素的float、clearvertical-align屬性將失效。

          圖片


          容器屬性:

          flex-direction:(排列方向橫向還是縱向)
          row
          (默認值):主軸為水平方向,起點在左端。
          row-reverse
          :主軸為水平方向,起點在右端。
          column
          :主軸為垂直方向,起點在上沿。
          column-reverse
          :主軸為垂直方向,起點在下沿。

          圖片

          flex-wrap:(如何換行)
          nowrap
          (默認):不換行。

          wrap
          :換行,第一行在上方。

          wrap-reverse
          :換行,第一行在下方。


          flex-flow:(
          flex-directionflex-wrap簡稱,默認值為row nowrap

          justify-content:(橫向對齊方式)
          flex-start(默認值):左對齊
          flex-end
          :右對齊
          center
          : 居中
          space-between
          :兩端對齊,項目之間的間隔都相等
          space-around:每個項目兩側的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。

          圖片

          align-items:(縱向對齊方式)
          flex-start:交叉軸的起點對齊。
          flex-end
          :交叉軸的終點對齊。
          center
          :交叉軸的中點對齊。
          baseline
          : 項目的第一行文字的基線對齊
          stretch(默認值):如果項目未設置高度或設為auto,將占滿整個容器的高度。

          圖片

          align-content:(多根軸線的對齊方式)
          flex-start
          :與交叉軸的起點對齊。
          flex-end
          :與交叉軸的終點對齊。
          center
          :與交叉軸的中點對齊。
          space-between
          :與交叉軸兩端對齊,軸線之間的間隔平均分布。
          space-around
          :每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍
          stretch(默認值):軸線占滿整個交叉軸。

          圖片

           
          box屬性:


          order:(排列順序)
          數值越小,排列越靠前,默認為0。

          flex-grow:(剩余空間分配,box放大比例,默認為0,即如果存在剩余空間,也不放大)

          圖片

          flex-shrink:(box縮小比例,默認為1,即如果空間不足,該項目將縮?。?br style="box-sizing:border-box;outline:0px;word-break:break-all;" />
          圖片

          flex-basis:(box占據的寬度或高度)

          圖片

          align-self:(單個box的對齊方式,與其他box對齊方式)

          圖片
          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          談談BFC

          周周

          一、什么是BFC
                 BFC(block formatting context)簡單來說,BFC 就是一種屬性,這種屬性會影響著元素的定位以及與其兄弟元素之間的相互作用。
              中文常譯為塊級格式化上下文。是 W3C CSS 2.1 規范中的一個概念, 從樣式上看,具有 BFC 的元素與普通的容器沒有什么區別,但是從功能上,具有 BFC 的元素可以看作是隔離了的獨立容器,容器里面的元素不會在布局上影響到外面的元素,并且 BFC 具有普通容器沒有的一些特性,它決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。

          、如何觸發 BFC

                上面介紹了 BFC 的定義,那么如何觸發 BFC 呢?
              滿足下面任一條件的元素,會觸發為 BFC :
              1、浮動元素,float 除 none 以外的值
              2、絕對定位元素,position(absolute,fixed)
              3、display 為以下其中之一的值 inline-blocks,table-cells,table-captions
              4、overflow 除了 visible 以外的值(hidden,auto,scroll)

          、BFC布局與普通文檔流布局區別      
              普通文檔流布局規則
              1.浮動的元素是不會被父級計算高度
              2.非浮動元素會覆蓋浮動元素的位置
              3.margin會傳遞給父級
              4.兩個相鄰元素上下margin會重疊

              BFC布局規則
              1.浮動的元素會被父級計算高度(父級觸發了BFC)
              2.非浮動元素不會覆蓋浮動元素位置(非浮動元素觸發了BFC)
              3.margin不會傳遞給父級(父級觸發了BFC)

              4.兩個相鄰元素上下margin會重疊(給其中一個元素增加一個父級,然后讓他的父級觸發BFC)

             下面來說一下BFC的實際使用場景
             場景1:解決子盒子都浮動時 父盒子高度不參與計算問題
              <style>
                .far {
                   border: 10px solid pink;
                   width: 300px;
               }
                .child {
                   border: 10px solid yellowgreen;
                   width:100px;
                   height: 100px;
                   float: left;
              }
               .far{
                   overflow: hidden;
              }
              </style>
              <body>
                  <div class="far">
                       <div class="child"></div>
                       <div class="child"></div>
                  </div>
              </body>

              根據overflow 除了 visible 以外的值(hidden,auto,scroll)就會觸發BFC的原則 計算BFC高度時 ,floatbox也參與其中。


              場景2:box垂直方向的距離 會由margin來決定 相鄰兩個盒子之間margin會重疊 ,這就是margin上下間值合并的原因

              <style>
              p {
                  color: pink;
                  background: #fcc;
                  width: 200px;
                  height:100px;
                  text-align:center;
                  margin: 100px;
              }
              </style>
              <body>
                 <p></p>
                 <p></p>
              </body>

              要解決這個問題我們可以在p外面包裹一層容器,并觸發該容器生成一個BFC。那么兩個P便不屬于同一個BFC,就不會發生margin重疊了,解決代碼如下。
              <style>
                 .box {
                    overflow: hidden;
                 }
                 p {
                    background: green;
                    width: 200px;
                    height: 200px;
                    margin: 100px;
                }
              </style>
              <body>
                 <p></p>
                 <div class="box">
                     <p></p>
                 </div>

              </body>

              場景3:實現左側固定右側自適應等類似布局
              <style>
                  .out{
                      border: 1px solid red;
                      height: 200px;
                  }
                  .left{
                      width: 200px;
                      height: 150px;
                      background-color: green;
                      float: left;
                  }
                  .right{
                      background-color: pink;
                      height: 250px;
                      overflow: hidden;
                  }
                </style>
                <body>
               <div class="out">
                  <div class="left"></div>
                  <div class="right"></div>
                </div>

          使用three.js的著色器通道渲染地球模型

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          我們都知道,three.js庫里面內置了很多著色器通道對象供我們渲染場景,本文將對EffectComposer、RenderPass、FilmPass這三個通道進行學習和實現:

          1.RenderPass這個通道會在當前場景(scene)和攝像機(camera)的基礎上渲染出一個新場景,新建:

          [javascript] view plain copy
          1. let renderPass = new THREE.RenderPass(scene, camera);  

          2.FilmPass這個通道通過掃描線和失真模擬電視屏幕效果,實現的效果超有時代感,新建:

          [javascript] view plain copy
          1. /*四個參數分別為粗糙程度,掃描線強度,掃描線數量,是否轉換為灰度圖*/  
          2. let effectFilm = new THREE.FilmPass(0.8, 0.325, 256, false);  
          3. //將渲染結果輸出到屏幕  
          4. effectFilm.renderToScreen = true;  

          3.EffectComposer可以理解為著色器通道容器,著色器通道按照先后順序添加進來并執行,新建:

          [javascript] view plain copy
          1. /*渲染效果組合器,每個通道都按照傳入的順序執行*/  
          2. let composer = new THREE.EffectComposer(renderer);  
          3. composer.addPass(renderPass);  
          4. composer.addPass(effectFilm);  

          本文實現的demo基于three.js_r86(請自行下載),代碼所用js文件和圖片都在下載的那個包里面,請讀者自行引用。

          實現效果:



          代碼:

          [html] view plain copy
          1. <!DOCTYPE html>  
          2. <html lang="en">  
          3. <head>  
          4.     <meta charset="UTF-8">  
          5.     <title>shader_2_earth</title>  
          6.     <style>  
          7.         body{  
          8.             margin: 0;  
          9.             overflow: hidden;  
          10.         }  
          11.     </style>  
          12. </head>  
          13. <body>  
          14. <script src="build/three.js"></script>  
          15. <script src="js/libs/stats.min.js"></script>  
          16. <script src="js/libs/dat.gui.min.js"></script>  
          17. <script src="js/controls/OrbitControls.js"></script>  
          18. <script src="js/Detector.js"></script>  
          19.   
          20. <script src="js/postprocessing/EffectComposer.js"></script>  
          21. <script src="js/postprocessing/ShaderPass.js"></script>  
          22. <script src="js/postprocessing/MaskPass.js"></script>  
          23. <script src="js/postprocessing/FilmPass.js"></script>  
          24. <script src="js/postprocessing/BloomPass.js"></script>  
          25. <script src="js/postprocessing/RenderPass.js"></script>  
          26.   
          27. <script src="js/shaders/CopyShader.js"></script>  
          28. <script src="js/shaders/FilmShader.js"></script>  
          29.   
          30. <div id="stats"></div>  
          31. <div id="container"></div>  
          32. <script>  
          33.     //檢測webgl的兼容性  
          34.    if(!Detector.webgl) Detector.addGetWebGLMessage();  
          35.   
          36.    let scene;  
          37.    let camera, renderer, sphere, controls, stats;  
          38.    let ambientLight, spotLight;  
          39.    let composer;  
          40.    let clock;  
          41.   
          42.    main();  
          43.    render();  
          44.   
          45.    function main() {  
          46.        scene = new THREE.Scene();  
          47.   
          48.        camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);  
          49.        camera.position.set(-10, 15, 25);  
          50.        camera.lookAt(new THREE.Vector3(0, 0, 0));  
          51.   
          52.        renderer = new THREE.WebGLRenderer({antialias:true});  
          53.        renderer.setClearColor(new THREE.Color(0,0,0));  
          54.        renderer.setSize(window.innerWidth, window.innerHeight);  
          55.        renderer.shadowMapEnabled = true;  
          56.   
          57.        controls = new THREE.OrbitControls(camera);  
          58.        controls.autoRotate = false;  
          59.   
          60.        clock = new THREE.Clock();  
          61.   
          62.        ambientLight = new THREE.AmbientLight(0x181818);  
          63.        scene.add(ambientLight);  
          64.   
          65.        spotLight = new THREE.SpotLight(0xffffff);  
          66.        spotLight.position.set(550, 100, 550);  
          67.        spotLight.intensity = 0.6;  
          68.        scene.add(spotLight);  
          69.   
          70.        //創建地球  
          71.        sphere = createMesh(new THREE.SphereGeometry(10, 60, 60));  
          72.        scene.add(sphere);  
          73.   
          74.        document.getElementById("container").appendChild(renderer.domElement);  
          75.   
          76.        /**  
          77.         * 添加渲染通道  
          78.         */  
          79.        //在當前場景和攝像機的基礎上渲染一個新場景  
          80.        let renderPass = new THREE.RenderPass(scene, camera);  
          81.        //通過掃描線和失真來實現模擬電視屏幕的效果  
          82.        let effectFilm = new THREE.FilmPass(0.8, 0.325, 256, false);  
          83.        //將渲染結果輸出到屏幕  
          84.        effectFilm.renderToScreen = true;  
          85.   
          86.        //渲染效果組合器,每個通道都按照傳入的順序執行  
          87.        composer = new THREE.EffectComposer(renderer);  
          88.        composer.addPass(renderPass);  
          89.        composer.addPass(effectFilm);  
          90.   
          91.        //菜單欄元素  
          92.        let guiFields = {  
          93.            "掃描線數量": 256,  
          94.            "灰度圖像": false,  
          95.            "掃描線強度": 0.3,  
          96.            "粗糙程度": 0.8,  
          97.            "updateEffectFilm": function () {  
          98.                effectFilm.uniforms.grayscale.value = guiFields.灰度圖像;  
          99.                effectFilm.uniforms.nIntensity.value = guiFields.粗糙程度;  
          100.                effectFilm.uniforms.sIntensity.value = guiFields.掃描線強度;  
          101.                effectFilm.uniforms.sCount.value = guiFields.掃描線數量;  
          102.            }  
          103.        };  
          104.   
          105.        //新建一個菜單欄  
          106.        let gui = new dat.GUI();  
          107.        gui.add(guiFields, "掃描線數量", 0, 2048).onChange(guiFields.updateEffectFilm);  
          108.        gui.add(guiFields, "掃描線強度", 0, 1).onChange(guiFields.updateEffectFilm);  
          109.        gui.add(guiFields, "粗糙程度", 0, 3).onChange(guiFields.updateEffectFilm);  
          110.        gui.add(guiFields, "灰度圖像").onChange(guiFields.updateEffectFilm);  
          111.   
          112.        stats = initStats();  
          113.    }  
          114.   
          115.    //創建一個Mesh  
          116.    function createMesh(geometry) {  
          117.   
          118.        //初始化紋理加載器  
          119.        let textureLoader = new THREE.TextureLoader();  
          120.        //加載圖片  
          121.        let uniforms = {  
          122.            planetTexture:{value:textureLoader.load("textures/planets/earth_atmos_2048.jpg")},  
          123.            specularTexture:{value:textureLoader.load("textures/planets/earth_specular_2048.jpg")},  
          124.            normalTexture:{value:textureLoader.load("textures/planets/earth_normal_2048.jpg")}  
          125.        };  
          126.   
          127.        //創建phong材料,并進行相應圖片的貼圖  
          128.        let planetMaterial = new THREE.MeshPhongMaterial();  
          129.        planetMaterial.specularMap = uniforms.specularTexture.value;  
          130.        planetMaterial.specular = new THREE.Color(0x4444aa);  
          131.   
          132.        planetMaterial.normalMap = uniforms.normalTexture.value;  
          133.        planetMaterial.map = uniforms.planetTexture.value;  
          134.   
          135.        //新建一個mesh  
          136.        let mesh = new THREE.SceneUtils.createMultiMaterialObject(geometry, [planetMaterial]);  
          137.   
          138.        return mesh;  
          139.    }  
          140.   
          141.    //渲染更新場景  
          142.   
          143.    function render() {  
          144.        stats.update();  
          145.        let delta = clock.getDelta();  
          146.        controls.update(delta);  
          147.        sphere.rotation.y += 0.002;  
          148.        requestAnimationFrame(render);  
          149.   
          150.        //沒有著色器通道系統默認為WebGLRenderer.render  
          151.        //使用著色器通道后,應使用使用composer.render  
          152.        composer.render(delta);  
          153.    }  
          154.   
          155.    //左上角幀顯示  
          156.    function initStats() {  
          157.        let stats = new Stats();  
          158.        stats.setMode(0);  
          159.        stats.domElement.style.position = 'absolute';  
          160.        stats.domElement.style.left = '0px';  
          161.        stats.domElement.style.top = '0px';  
          162.        document.getElementById("stats").appendChild(stats.domElement);  
          163.   
          164.        return stats;  
          165.    }  
          166. </script>  
          167. </body>  
          168. </html>  
          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          8個非常個性化的CSS3單/復選框

          周周

                 單選框和復選框在網頁表單中應用十分廣泛,但是瀏覽器默認自帶的單選框和復選框樣式不僅不統一,而且大多都比較簡單丑陋。本文給大家介紹了一些基于CSS3的個性化單選框和復選框,一些選中動畫是基于jQuery的,你可以挑選喜歡的單選框和復選框應用到自己的網頁中去,非常方便。

                   1、jQuery超級個性化的單線框和復選框

                 今天要分享的也是一個非常個性化的單選框和復選框插件,顏色你可以自己定義。

                56a706650001cc8206100418.png

                             在線演示  源碼下載

                   2、CSS3漂亮的自定義Checkbox復選框 9款迷人樣式

                 今天我們來分享一款9款樣式迷人的CSS3漂亮的自定義checkbox復選框。這幾款復選框樣式很豐富,使用起來也比較方便。


          56a70c3e0001aede05880266.jpg

                              在線演示  源碼下載

                  3、CSS3自定義美化復選框Checkbox組合

                 今天我們要來分享一組非常漂亮的CSS3自定義復選框checkbox,每一個checkbox都有其各自的特點。有幾款checkbox在選中的情況下還會出現動畫效果,非常不錯的CSS3自定義美化checkbox組合。

          56a70cbb00019efb06100379.png

                          在線演示   源碼下載

                 4、jQuery實現美化版的單選框和復選框

                 今天這款是利用jQuery實現的美化版單選框和復選框,樣式風格非常簡潔清爽,是一款很不錯的jQuery按鈕插件。

          56a70e01000161c706100252.png

                                    在線演示  源碼下載

                 5、純CSS3 3D按鈕 按鈕酷似牛奶般剔透

                 CSS3按鈕一般都可以設計的非常漂亮,利用投影、漸變等CSS3屬性可以把按鈕渲染的十分動感。今天分享的這款CSS3按鈕外觀非常特別,它看上去酷似晶瑩剔透的牛奶,而且在點擊按鈕時出現3D效果的動畫,按鈕按下時,按鈕會輕輕的彈動一下,非常逼真。

          56a70e1000013a8d05880281.jpg

                           在線演示  源碼下載

                  6、HTML5/CSS3開關按鈕 立體3D按鈕

                  今天介紹的這款HTML5/CSS3開關切換按鈕是利用純CSS3的,代碼非常簡單,3D效果也還可以。

          56a70e1b0001142f08000557.gif

                            在下演示  源碼下載

                   7、CSS3自定義發光Radiobox單選框

                 今天我們要來分享一款CSS3實現的自定義發光radiobox單選框插件,該radiobox選中時也有滑塊的動畫。

          56a70e2d0001b19b05880259.jpg

                             在線演示  源碼下載

                8、CSS3實現自定義Checkbox動畫

                今天我們要再來分享一款CSS3自定義checkbox,而且這款checkbox還帶有動畫效果,當你選中checkbox的時候,會以動畫的方式打上一個大大的勾。

          56a70e350001219c05880215.jpg 

                             在線演示  源碼下載



                   以上就是8個非常個性化的CSS3單/復選框,希望對你有所幫助。

                 本文鏈接:http://www.codeceo.com/article/10-personal-css3-radiobox-checkbox.html







          include指令標記與動作標記詳解

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          一.include指令標記

          include指令標記用于把JSP文件,HTML網文文件等文件靜態嵌入當前JSP網頁中,語法如下:

          [html] view plain copy
          1. <%@include file="xxURL"%>  

          靜態嵌入就是“先包含后處理”在編譯階段完成對文件嵌入,即先將當前JSP頁面與被嵌入文件合并成一個新的JSP頁面

          eg:

          [html] view plain copy
          1. <%@ page language="java" contentType="text/html; charset=utf-8"  
          2.     pageEncoding="ISO-8859-1"%>  
          3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
          4. <html>  
          5. <head>  
          6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
          7. <title>Insert title here</title>  
          8. </head>  
          9. <body>  
          10.         <font color="red"size=5>  
          11.             lalla  
          12.         </font>  
          13. </body>  
          14. </html>  
                      
          [html] view plain copy
          1. <%@ page language="java" contentType="text/html; charset=utf-8"  
          2.     pageEncoding="UTF-8"%>  
          3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
          4. <html>  
          5. <head>  
          6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
          7. <title>include動作標記</title>  
          8. </head>  
          9. <body>  
          10.     <br>  
          11.         <jsp:include page="demo.jsp"/>  
          12.     </br>  
          13. </body>  
          14. </html>  
          運行結果如下:


          二.include動作標記:

          動作標記是將JSP等文件動態嵌入當前JSP網頁中,語法如下:
          [html] view plain copy
          1. <jsp:include page="xxURL"/>  

          [html] view plain copy
          1. <jsp:include page="xxURL">  
          2.    子標記  
          3. <jsp:include/>  

          動態嵌入就是“先處理后包含”在運行階段完成對文件嵌入,即在把JSP頁面轉譯為JAVA文件時,并不合并兩個頁面。

          eg:

          [html] view plain copy
          1. <%@ page language="java" contentType="text/html; charset=utf-8"  
          2.     pageEncoding="ISO-8859-1"%>  
          3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
          4. <html>  
          5. <head>  
          6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
          7. <title>Insert title here</title>  
          8. </head>  
          9. <body>  
          10.         <font color="red"size=5>  
          11.             lalla  
          12.         </font>  
          13. </body>  
          14. </html>  

          [html] view plain copy
          1. <%@ page language="java" contentType="text/html; charset=utf-8"  
          2.     pageEncoding="UTF-8"%>  
          3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
          4. <html>  
          5. <head>  
          6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
          7. <title>include動作標記</title>  
          8. </head>  
          9. <body>  
          10.     <br>  
          11.         <jsp:include page="demo.jsp"/>  
          12.     </br>  
          13. </body>  
          14. </html>  

          運行結果:

          總結:靜態嵌入中嵌入頁面與原頁面合并了,動態嵌入則還沒有。

          動態嵌入與靜態嵌入相比較,動態嵌入執行速度稍慢,但是靈活性較高。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務


          20個最常用的javascript方法函數收集

          周周

               收集了一些比較常用的JavaScript函數

               1、字符串長度截取函數

               function cutstr(str,len){

                     var temp,icount = 0,patrn = /[^x00-\xff]/,strre=" ";

                     for(var i= 0;i<str.length;i++) {

                          if (icount<len-1){

                              temp =str.substr(i,1);

                              if (patrn.exec(temp)==null){

                                 icount =icount+1    

                            }else {

                               icount =icount+2

                           }

                              strre+=temp

                        } else {

                             break;

                         }

                    }

                     returen strre+"...";

                }

               2、替換全部

               String.prototype.replaceAll = function(s1,s2) {

                      return this.replace(new RegExp(s1,"gm"),s2);

               }

               3、清除空格

               function trim = function() {

                      var reExtraSpace = /^\s*(.*?)\s+$/;

                      return this.replace(reExtraSpace,"$1");

               }

               4、清除左空格/右空格

                function  ltrim(s){

                      return s.replace(/^(\s*| *)/,"");

                }

               function rtrim(s) {

                     return s.replace(/(\s*| *)$/,"");

                }

                5、判斷是否以某個字符串開頭

                String.prototype.startWith = function(s) {

                      return this.indexOf(s)==0;

                }

                 6、判斷是否以某個字符串結束 

                String.prototype.endWith = function(s) {

                      var d = this.length - s.length;

                      return (d >= 0 && this.lastIndexOf(s)==d);

                  }

                  7、轉義HTML標簽

                 function HtmlEncode(text) {

                       return text.replace(/&/g,'&').replace(/\"/g,' " ').replace(/</g,'<').replace(/>/g,'>');

                 }

                  8、時間日期格式轉換

                 Date.prototype.Format = function(formatStr){

                       var str = formatStr;

                       var week =['日','一','二','三','四','五','六'];

                       str = str.replace(/yyyy|YYYY/,this.getFullYear());

                       str = str.replace(/yy|YY,(this.getYear()%100)>9?(this.getYear()%100).toString():'0'+(this.getYear()%100));

                       str = str.replace(/MM/,(this.getMonth()+1)>9?(this.getMonth()+1).toString():'0'+this.getMonth()+1));

                       str = str.replace(/w|W/g,week[(this.getDay()];

                       str = str.replace(/dd|DD/,(this.getDate()>9?this.getDate().toString():'0'+this.getDate());

                       str = str.replace(/d|D/g,this.getDate());

                       str = str.replace(/hh|HH/,this.getHours()>9?(this.getHours().toString():'0'+this.getHours());

                       str = str.replace(/h|H/g,this.getHours());

                       str = str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0'+this.getMinutes());

                       str = str.replace(/m/g,this.getMinutes());

                       str = str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0'+this.getgetSeconds());

                       str = str.replace(/s|S/g,this.getSeconds());

                      return str;

                  }

                  9、判斷是否為數字類型

                  function isDigit (value){

                       var patrn = /^[0-9]*$/;

                       if (patrn.exec(value) == null || value=="" ) {

                             return false;  

                       } else {

                            return true;

                      }

                  }

                 10、設置cookie

                 function setCookie(name,value,Hours){

                        var d =new Date();

                        var offset =8;

                        var utc = d.getTime()+(d.getTimezoneOffset()*60000);

                        var nd = utc+(3600000*offset);

                        var exp = new Date(nd);

                        exp.setTime(exp.getTime()+Hours*60*60*1000);

                        document.cookie = name+"="+escape(value)+";domain=360doc.com;"

                 }

                 獲取cookie值

                 function getCookie(name){

                       var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));

                       if (arr!=null){

                         return unescape(arr[2]);

                      }else {

                       return null;

                       }

                 }

                11、加入收藏夾

                 function AddFavorite(sURL,sTitle) {

                      try{

                         window.external.addFavorite(sURL,sTitle);

                   }catch(e){

                     try{

                         window.sidebar.addPanel(sTitle,sURL,"");

                      }catch(e){

                            alert("加入收藏夾失敗,請使用Ctrl+D進行添加");

                       }

                    }

                 }

                12、設為首頁

                function setHomepage(){

                       if(document.all){

                         document.body.style.behavior='url(#default#homepage)';

                         document.body.setHomePage('http://w3cboy.com')

                   }else if (window.sidebar){

                        if(window.netscape){

                           try{

                              netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")

                        }catch(e){

                           alert("該操作被瀏覽器拒絕,如果想啟用該功能,請在地址欄內輸入about:config,然后將

                           項 signed.applets.codebase_principal_support 值該為true");

                       }

                     }

                         var prefs = Components.classes['@mozilla.org/preferences- service;1'].getService(Components.interfaces.nsIPrefBranch); 

                         prefs.setCharPref('browser.startup.homepage', 'http://w3cboy.com');

                   }

                 }

                 13、加載樣式文件

                       function LoadStyle(url) {

                           try { 

                               document.createStyleSheet(url); 

                              } 

                             catch(e) { 

                                var cssLink = document.createElement('link');

                                cssLink.rel = 'stylesheet'; 

                                cssLink.type = 'text/css'; 

                                cssLink.href = url; 

                               var head = document.getElementsByTagName('head')[0]; 

                               head.appendChild(cssLink);

                              } 

                           }

                      14、返回腳本內容

                      function evalscript(s) { 

                             if(s.indexOf('<script') == -1) return s; 

                             var p = /<script[^\>]*?>([^\x00]*?)<\/script>/ig;

                             var arr = []; 

                             while(arr = p.exec(s)) { 

                             var p1 = /<script[^\>]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i; 

                             var arr1 = []; 

                             arr1 = p1.exec(arr[0]); 

                             if(arr1) { 

                                   appendscript(arr1[1], '', arr1[2], arr1[3]);

                              } else { 

                                   p1 = /<script(.*?)>([^\x00]+?)<\/script>/i; 

                                   arr1 = p1.exec(arr[0]); 

                                   appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1);

                                    } 

                                 } 

                                return s; 

                            }

                      15、清除腳本內容

                       function stripscript(s) { 

                                return s.replace(/<script.*?>.*?<\/script>/ig, ''); 

                        }

                        16、動態加載腳本文件

                       function appendscript(src, text, reload, charset) {

                                var id = hash(src + text); 

                                if(!reload && in_array(id, evalscripts)) return; 

                                if(reload && $(id)) { $(id).parentNode.removeChild($(id));
                          }

                          evalscripts.push(id);

                          var scriptNode = document.createElement("script"); 

                          scriptNode.type = "text/javascript"; 

                          scriptNode.id = id; 

                          scriptNode.charset = charset ? charset : (BROWSER.firefox ? document.characterSet : document.charset); 

                         try { 

                              if(src) { 

                                     scriptNode.src = src; 

                                     scriptNode.onloadDone = false; 

                                     scriptNode.onload = function () { 

                                                 scriptNode.onloadDone = true;

                                                JSLOADED[src] = 1; 

                                      }; 

                                   scriptNode.onreadystatechange = function () {

                                   if((scriptNode.readyState == 'loaded' || scriptNode.readyState == 'complete') && !scriptNode.onloadDone) { 

                                             scriptNode.onloadDone = true; JSLOADED[src] = 1; 

                                            } 

                                         }; 

                                    } else if(text){ 

                                          scriptNode.text = text; 

                                   } 

                                   document.getElementsByTagName('head')[0].appendChild(scriptNode); 

                               } catch(e) {} 

                             }

                     17、返回按ID檢索的元素對象
                     
          function $(id) {

                              return !id ? null : document.getElementById(id); 

                       }

                     18、跨瀏覽器綁定事件

                     function addEventSamp(obj,evt,fn){ 

                              if(!oTarget){

                                     return;

                               } if (obj.addEventListener) { 

                                        obj.addEventListener(evt, fn, false);

                                   }else if(obj.attachEvent){ 

                                       obj.attachEvent('on'+evt,fn); 

                                     }else{

                                         oTarget["on" + sEvtType] = fn; 

                                      }

                              }

                       19、跨瀏覽器刪除事件

                          function delEvt(obj,evt,fn){ if(!obj){

                                  return;

                         } if(obj.addEventListener){

                                obj.addEventListener(evt,fn,false); 

                           }else if(oTarget.attachEvent){ 

                              obj.attachEvent("on" + evt,fn); 

                           }else{ 

                               obj["on" + evt] = fn; 

                            } 

                         }

                      20、元素添加on方法

                      Element.prototype.on = Element.prototype.addEventListener;

                       NodeList.prototype.on = function (event, fn) {、

                               []['forEach'].call(this, function (el) { 

                                     el.on(event, fn); 

                                });

                                return this; 

                         };






          px、em、rem、%、vw、vh、vm這些單位的區別

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          1.背景介紹


          我們為什么要選擇合適的網頁設計單位


          隨著Web的發展,對新的解決方案的需求也會繼續增大,對網頁的要求更高。


          網頁設計單位是涉及到我們布局的效果,使用不同的單位會對最終的demo,會有影響。


          現在都是要求響應式設計,需要適配各種設備,電腦,手機,平板。如果單位不合適,可能在這個設備顯示良好,那個設備就會打亂布局。


          所以需要我們選擇合適的單位來進行開發,設計。
          2.知識剖析


          1、px


          px就是pixel的縮寫,意為像素。px就是設備或者圖片最小的一個點,比如常常聽到的電腦像素是1024x768的,表示的是水平方向是1024個像素點,垂直方向是768個像素點。


          是我們網頁設計常用的單位,也是基本單位。通過px可以設置固定的布局或者元素大小,缺點是沒有彈性。


          特點是1. em的值并不是固定的; 2. em會繼承父級元素的字體大小。




          2、em


          參考物是父元素的font-size,具有繼承的特點。如果自身定義了font-size按自身來計算(瀏覽器默認字體是16px),整個頁面內1em不是一個固定的值。
          特點是1. em的值并不是固定的; 2. em會繼承父級元素的字體大小。
          3、rem


          rem是相對于根元素html,這樣就意味著,我們只需要在根元素確定一個參考值,可以設計HTML為大小為10px,到時設置1.2rem就是12px.以此類推。


          優點是,只需要設置根目錄的大小就可以把整個頁面的成比例的調好。


          4、%


          一般來說就是相對于父元素的,


          1、對于普通定位元素就是我們理解的父元素 2、對于position: absolute;的元素是相對于已定位的父元素 3、對于position: fixed;的元素是相對于ViewPort(可視窗口),
          5、vw


          css3新單位,view width的簡寫,是指可視窗口的寬度。假如寬度是1200px的話。那10vw就是120px


          舉個例子:瀏覽器寬度1200px, 1 vw = 1200px/100 = 12 px。


          6、vh


          css3新單位,view height的簡寫,是指可視窗口的高度。假如高度是1200px的話。那10vh就是120px


          舉個例子:瀏覽器高度900px, 1 vh = 900px/100 = 9 px。


          7、vm


          css3新單位,相對于視口的寬度或高度中較小的那個。其中最小的那個被均分為100單位的vm 舉個例子:瀏覽器高度900px,寬度1200px,取最小的瀏覽器高度,1 vm = 900px/100 = 9 px。


          兼容性太差 ,現在基本上沒人用,我試了一下Chrome就用不了。


          3.常見問題


          假如使用em來設置文字大小要注意什么?


          4.解決方案


          注意父元素的字體大小,因為em是根據父元素的大小來設置的。比如同樣是1.5em,要是父元素是20,那1.5em就是30px.要是父元素是30px,1.5em就是45px.


          特別是在多重div嵌套里面更要注意。


          5.擴展思考


          css還有哪些長度單位?


          in:寸


          cm:厘米


          mm:毫米


          t:point,大約1/72寸


          pc:pica,大約6pt,1/6寸


          6.更多問題
          1.pc pt ch一般用在什么場景?
          這些我們網頁設計基本上用不到,在排版上會有用處。


          2.如何使 1rem=10px
          在設置HTML{font-size:62.5%;}即可


          3.如果父元素沒有指定高度,那么子元素的百分比的高度是多少?
          會按照子元素的實際高度,設置百分比已經沒有效果了。
          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務


          一份最詳盡全面的UI界面切圖命名規范

          周周

                關于UI界面的切圖命名規范,U妹覺得關鍵是在于團隊能夠有一個統一的規則,所以這里只介紹一種通用的命名規則,當然大家也可以根據自己的實際情況去制定,這里只提供一種方法與思路,僅供參考。

                規范的命名方式可以提高開發人員的的開發效率和整個開發團隊的友好合作。U妹覺得要盡可能用最少的字符而又能完整的表達標識符的含義。

                一、切圖命名英文縮寫的3個原則

                1.較短的單詞可以通過去掉“元音”形成縮寫

                 2.較長的單詞可去單詞的頭部幾個字母形成縮寫

                 3.還有一些約定成俗的英文單詞縮寫

                二、命名規則

                    模塊_類別_功能_狀態.png

                  U妹舉個例子:nav_button_search_default.png

                  釋義為:導航_按鈕_搜索_默認.png

               啟動界面

                  啟動圖片 default.png

                   啟動logo default.png

                   如:default.png\defoult@2x.png\default-568@2x.png

            登錄界面

             登錄背景    login_bg.png

                   登錄logo   login_logo.png 

                   輸入框       login_input.png 

                   輸入框選中狀態       login_input_pre.png

                   登錄按鈕       login_btn.png

                   登錄按鈕選中狀態  login_btn_pre.png

               導航欄按鈕 (nav) 命名 

                   nav_功能描述.png

                   如:nav_menu.png\nav_menu_pre.png(同按鈕選中前后兩種狀態命名 )

               按鈕命名(btn可重復使用按鈕)

                  一般   normal   btn_xxx_normal.png

                  點擊  highlight btn_xxx_highlight.png

                  不能點擊  disabled  btn_xxx_disable.png

                  按下  pressed btn_xxx_pressed.png

                  選中  selected btn_xxx_selected.png 做為復數選擇出現機會不高

                  btn_功能屬性或色彩均可.png

                  如:btn_blue.png\btn_blue.9.png   藍色按鈕

              其他命名

                 圖標 icon_xxx.png

                 圖片 pic_xxx.png或是img_xxx.png

                 照片 pho_xxx.png

                 左側導航 命名 leftbar_功能描述.png

                 如:leftbar_info.png\leftbar_info_pre.png   個人中心 

             底部選項卡按鈕(TabBar)

                命名 Tab_功能描述.png  

                 如:tab_set.Png\nav_set_pre.png  設置 

             主頁命名

                命名 home_功能屬性+描述.png

                 如:home_menu_recommended.png  熱門推薦 

                 ps:描述可用英文或拼間開頭字母組合等

             列表頁命名規則

                命名 List_功能屬性+描述.png

                 如:list_menu_collect.png  列表頁收藏按鈕

             UI文件命名規范常用詞

                常用狀態 

                 正常 normat

                 按下 pressed 

                 選中 selected

                 禁用 disabled

                 已訪問 visited

                 懸停 hover

              控件&部件

                 控件:較獨立的可操作界面元素 

                  部件:描述屬于某控件一部分

                  按鈕(可點) Btn

                 圖標 Icon不可點、非點擊主體、圖案部件

                 標記 Sign  列表

                 List  菜單 Menu 

                 視圖 View

                 面板 Panel

                 薄板 Sheet

                 底部彈出菜單 欄 Bar 

                 狀態欄 StatusBar

                 導航欄 NaviBar

                 標簽欄  TabBar

                 工具欄 ToolBar

                 切換開關 Switch

                 滑動器 Slider

                 單選框 Radio

                 復選框 CheckBox

                 背景 Bg

                 蒙版、遮罩 Mask

                 收藏 collect

                 評論 comment

                 廣告 ad

                 時間 time

                 音頻 audio

                 視頻 viedio

                 不喜歡 dilike

                 用戶 user

                 首頁 hone

                 排名 ranked

                 搜索 search

                 標志 logo

                 進度條 progress bar

                 默認圖片 def_

                 分隔圖片 seg_

                 選擇 sel_

                 關閉 close

                 返回 back

                 編輯 eidt

                 內容 content

                 左  中  右 left  center   right

                 提示信息 msg

                 個人資料 porfile

                 彈出 pop

                 刪除 delete

                 下載 download

                 登錄 login

                 注冊 regsiter

                 標題title

                 注釋 note

                 鏈接 link

                 圖片 image(img)

                 刷新 refresh

             常用補充描述

                頂部 Top 

                 中間 Middle 

                 底部 Bottom 

                 第一 First 

                 第二 Second

                 最后 Last

                 頁頭 Header

                 頁腳  Footer 







           







                


           

                



          Java跨域問題的解決方案及axios的跨域請求方法封裝

          seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          原因

          出于安全考慮,瀏覽器有一個同源策略。瀏覽器中,異步請求的地址與目標地址的協議、域名和端口號三者與當前有不同,就屬于跨域請求。

          限制跨域訪問是瀏覽器的一個安全策略,因為如果沒有這個策略,那么就有被跨站攻擊的危險。比如,攻擊者在自己的網站A放置一個表單,這個表單發起DELETE請求,刪除某個用戶在B網站上的個人資料。如果沒有同源策略保護,那么在同一個瀏覽器內,如果用戶已經登錄了B網站,這個刪除的請求就會被接受,導致在用戶不知情的情況下自己在B網站中的資料被刪除。

          解決方式

          瀏覽器的同源策略提升了安全性,但是給需要在不同域名下開發的開發者帶來了跨域問題。

          解決跨域的問題主要有: 
          jsonp和cors。jsonp是利用 script 標簽可以跨域加載的特性而創造出來的一種非正式的跨域解決方案。在實際開發中,推薦使用cors,即在服務端返回時加入允許跨域的請求頭,允許指定域名的跨域訪問。

          千萬要小心!這種直接加 * 號的做法是相當危險的,千萬別這么做!

          response.addHeader("Access-Control-Allow-Origin", "*"); 
          
          • 1

          正確的做法:

          1. 創建一個 Filter 類

          /**
           * 使用Filter的方式解決跨域問題
           */ public class CorsFilter implements Filter { private static final List<String> ALLOW_ORIGINS = Config.getListString("allowOrigins", ","); private static final String REQUEST_OPTIONS = "OPTIONS"; @Override public void init(FilterConfig filterConfig) throws ServletException {
              } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                  HttpServletRequest request = (HttpServletRequest) servletRequest;
                  HttpServletResponse response = (HttpServletResponse) servletResponse;
                  String orgHeader = request.getHeader(HttpHeaders.ORIGIN); if (orgHeader != null && ALLOW_ORIGINS.contains(orgHeader)) { // 允許的跨域的域名 response.addHeader("Access-Control-Allow-Origin", orgHeader); // 允許攜帶 cookies 等認證信息 response.addHeader("Access-Control-Allow-Credentials", "true"); // 允許跨域的方法 response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PATCH, PUT, HEAD"); // 允許跨域請求攜帶的請求頭 response.addHeader("Access-Control-Allow-Headers", "Content-Type, Content-Length, Authorization, Accept, X-Requested-With"); // 返回結果可以用于緩存的最長時間,單位是秒。-1表示禁用 response.addHeader("Access-Control-Max-Age", "3600"); // 跨域預檢請求,直接返回 if (REQUEST_OPTIONS.equalsIgnoreCase(request.getMethod())) { return;
                      }
                  }
                  filterChain.doFilter(request, response);
              } @Override public void destroy() {
          
              }
          } 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26
          • 27
          • 28
          • 29
          • 30
          • 31
          • 32
          • 33
          • 34
          • 35
          • 36
          • 37
          • 38
          • 39

          2. 在 web.xml 的最前面注冊這個 Filter

          <filter> <filter-name>corsfilter</filter-name> <filter-class>com.bj58.crm.plus.filter.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>corsfilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> 
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9

          前端使用 axios 可以先進行封裝

          http-util.js

          let axios = require("axios"); let qs = require("qs");
          axios.defaults.withCredentials = true;
          axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; function post(url, param) { return axios.post(url, qs.stringify(param))
          } function get(url, param) { axios.get(url, {params: param})
          }
          
          export default {
            get,
            post
          };

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務




          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合