mirror of
				https://gitee.com/vant-contrib/vant.git
				synced 2025-10-31 03:22:08 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div :class="['van-doc-simulator', { 'van-doc-simulator-fixed': isFixed }]">
 | |
|     <iframe ref="iframe" :src="src" :style="simulatorStyle" frameborder="0" />
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: 'VanDocSimulator',
 | |
| 
 | |
|   props: {
 | |
|     src: String,
 | |
|   },
 | |
| 
 | |
|   data() {
 | |
|     return {
 | |
|       scrollTop: window.scrollY,
 | |
|       windowHeight: window.innerHeight,
 | |
|     };
 | |
|   },
 | |
| 
 | |
|   computed: {
 | |
|     isFixed() {
 | |
|       return this.scrollTop > 60;
 | |
|     },
 | |
| 
 | |
|     simulatorStyle() {
 | |
|       const height = Math.min(640, this.windowHeight - 90);
 | |
|       return {
 | |
|         height: height + 'px',
 | |
|       };
 | |
|     },
 | |
|   },
 | |
| 
 | |
|   mounted() {
 | |
|     window.addEventListener('scroll', () => {
 | |
|       this.scrollTop = window.scrollY;
 | |
|     });
 | |
|     window.addEventListener('resize', () => {
 | |
|       this.windowHeight = window.innerHeight;
 | |
|     });
 | |
|   },
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="less">
 | |
| .van-doc-simulator {
 | |
|   position: absolute;
 | |
|   top: calc(var(--van-doc-padding) + var(--van-doc-header-top-height));
 | |
|   right: var(--van-doc-padding);
 | |
|   z-index: 1;
 | |
|   box-sizing: border-box;
 | |
|   width: var(--van-doc-simulator-width);
 | |
|   min-width: var(--van-doc-simulator-width);
 | |
|   overflow: hidden;
 | |
|   background: var(--van-doc-background-2);
 | |
|   border-radius: var(--van-doc-border-radius);
 | |
| 
 | |
|   @media (max-width: 1100px) {
 | |
|     right: auto;
 | |
|     left: 750px;
 | |
|   }
 | |
| 
 | |
|   @media (min-width: var(--van-doc-row-max-width)) {
 | |
|     right: 50%;
 | |
|     margin-right: calc(var(--van-doc-row-max-width) / 2 * -1 + 24px);
 | |
|   }
 | |
| 
 | |
|   &-fixed {
 | |
|     position: fixed;
 | |
|     top: var(--van-doc-padding);
 | |
|   }
 | |
| 
 | |
|   iframe {
 | |
|     display: block;
 | |
|     width: 100%;
 | |
|   }
 | |
| }
 | |
| </style>
 |