• webbrowser内容滚动(javascript内容无缝滚动)


    一 使用webbrowser现有方法

    引用:https://blog.csdn.net/xiaokailele/article/details/48392673

        public partial class Form1 : Form
        {
            int current = 0;
            Timer timeDown = new Timer();
            Timer timeUp = new Timer();
     
            public Form1()
            {
                InitializeComponent();
                
                webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
                webBrowser1.Navigate("http://www.yahoo.com.cn");
     
                timeDown.Interval = 100;
                timeDown.Tick += new EventHandler(timeDown_Tick);
                timeUp.Interval = 100;
                timeUp.Tick += new EventHandler(timeUp_Tick);
     
            }
            void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                current = 0;
                timeDown.Enabled = true;
            }
            void timeDown_Tick(object sender, EventArgs e)
            {
                HtmlDocument doc = webBrowser1.Document;
                int height = webBrowser1.Document.Body.ScrollRectangle.Height;
                current += height / 100;
                if (current >= height)
                {
                    current = height;
                    timeDown.Enabled = false;
                    timeUp.Enabled = true;
                }
     
                doc.Window.ScrollTo(new Point(0, current));
            }
            void timeUp_Tick(object sender, EventArgs e)
            {
                HtmlDocument doc = webBrowser1.Document;
                int height = webBrowser1.Document.Body.ScrollRectangle.Height;
                current -= height / 100;
                if (current <= 0)
                {
                    current = 0;
                    timeUp.Enabled = false;
                }
                doc.Window.ScrollTo(new Point(0, current));
            }
        }

    二 使用javascript

    <!DOCTYPE html>
    <html lang='en' xmlns='http://www.w3.org/1999/xhtml'>
    <head>
        <meta charset="utf-8" />
        <title>内容循环滚动</title>
        <style type="text/css">
            .bg {
                position: relative;
                 800px;
                height: 300px;
                overflow: hidden;
                border: 1px solid;
            }
    
            .content1 {
                 700px;
                position: absolute;
                top: 8px;
            }
    
            .content2 {
                 700px;
                position: absolute;
                visibility: hidden;
            }
        </style>
        <script type="text/javascript">
            var y = 0;
            var myLoop;
            var scrollStatus = false;
    
            function ScrollLoop() {
                var content1 = document.getElementById('content1');
                var content2 = document.getElementById('content2');
                var height1 = parseInt(content1.offsetHeight);
                var height2 = parseInt(content2.offsetHeight);
    
                y -= 1;
                if (parseInt(content1.style.top) < parseInt(content2.style.top)) {
                    content1.style.top = y + 'px';
                    content2.style.top = y + height1 + 'px';
    
                    if (parseInt(content2.style.top) <= 0) {
                        y = parseInt(content2.style.top);
                        content1.style.top = parseInt(content2.style.top) + height2 + 'px';
                    }
                }
                else {
                    content2.style.top = y + 'px';
                    content1.style.top = y + height2 + 'px';
    
                    if (parseInt(content1.style.top) <= 0) {
                        y = parseInt(content1.style.top);
                        content2.style.top = parseInt(content1.style.top) + height1 + 'px';
                    }
                }
            }
    
            function ResetLoopTime() {
                clearInterval(myLoop);
                var time = document.getElementById('textTime').value;
                myLoop = setInterval(ScrollLoop, time);
                scrollStatus = true;
            }
    
            function startScrollLoop(isResetY, loopTime) {
                var content1 = document.getElementById('content1');
                var content2 = document.getElementById('content2');
    
                if (isResetY) {
                    y = 6;
                    content1.style.top = y + 'px';
                    content2.style.top = y + parseInt(content1.offsetHeight) + 'px';
                }
    
                clearInterval(myLoop);
                content2.style.visibility = 'visible';
                myLoop = setInterval(ScrollLoop, loopTime);
                scrollStatus = true;
            }
    
            function stopScrollLoop(reset) {
                clearInterval(myLoop);
                scrollStatus = false;
            }
    
            function reset() {
                document.getElementById('content2').style.visibility = 'hidden';
                document.getElementById('content1').style.top = 6 + 'px';
            }
    
            function getTextHeight() {
                return parseInt(document.getElementById('content1').offsetHeight);
            }
    
            function getScrollStatus() {
                return scrollStatus;
            }
    
        </script>
    </head>
    <body>
        <div>
            <input type="button" onclick="startScrollLoop(true, 10)" value="开始滚动" />
            <input type="button" onclick="stopScrollLoop()" value="停止滚动" />
            <input type="button" onclick="getTextHeight()" value="获取内容高" /><br>
            <input type="text" id="textTime" />
            <input type="button" onclick="ResetLoopTime()" value="重新设置滚动时间" />
        </div>
        <div class='bg'>
            <div class="content1" id="content1">
                <p>pppppppppppppppppp1</p>
                <p>pppppppppppppppppp2</p>
                <p>pppppppppppppppppp3</p>
                <p>pppppppppppppppppp4</p>
                <p>pppppppppppppppppp5</p>
                <p>pppppppppppppppppp6</p>
                <p>pppppppppppppppppp7</p>
                <p>pppppppppppppppppp8</p>
                <p>pppppppppppppppppp9</p>
                <p>pppppppppppppppppp10</p>
            </div>
            <div class="content2" id="content2">
                <p>pppppppppppppppppp1</p>
                <p>pppppppppppppppppp2</p>
                <p>pppppppppppppppppp3</p>
                <p>pppppppppppppppppp4</p>
                <p>pppppppppppppppppp5</p>
                <p>pppppppppppppppppp6</p>
                <p>pppppppppppppppppp7</p>
                <p>pppppppppppppppppp8</p>
                <p>pppppppppppppppppp9</p>
                <p>pppppppppppppppppp10</p>
            </div>
        </div>
    </body>
    </html>

    webbrowser调用

      private void ControlScroll()
            {
                if (!IsAutoScroll)
                    return;
    
                bool scrollStatus = (bool)webbrowser1.Document.InvokeScript("getScrollStatus");
                int height = (int)((int)webbrowser1.Document.InvokeScript("getTextHeight") * Convert.ToDouble(currDisplayRate) / 100);
                if (height > webbrowser1.Height)
                {
                    if (!scrollStatus)
                    {
                        webbrowser1.Document.InvokeScript("startScrollLoop", new object[] { true, LoopTime });
                        webbrowser1.ScrollBarsEnabled = false;
                    }
                }
                else
                {
                    if (scrollStatus)
                    {
                        webbrowser1.ScrollBarsEnabled = true;
                        webbrowser1.Document.InvokeScript("stopScrollLoop");
                        webbrowser1.Document.InvokeScript("reset");
                    }
                }
            }
    
        }

    三 结果:

    我选择使用第二种方法,因为我是通过比较网页内容的高度和webbrowser的高度来确定是否滚动的

    第一种相对于第二种

    (1)进行网页的缩放处理  webBrowser1.Document.Body.ScrollRectangle.Height  这个值是不变的,不能用来确定何时内容滚动

    (2)触底事件不好判断

    (3)实现内容无缝循环,不如js方便

  • 相关阅读:
    柔性数组
    2015阿里秋招当中一个算法题(经典)
    LAMP环境搭建
    JS和JQuery中的事件托付 学习笔记
    #17 Letter Combinations of a Phone Number
    码农生涯杂记_5
    【C++ Primer每日刷】之三 标准库 string 类型
    扎根本地连接未来 千米网的电商“红海”生存术
    poj 3356
    经验之谈—OAuth授权流程图
  • 原文地址:https://www.cnblogs.com/yaosj/p/10341128.html
Copyright © 2020-2023  润新知